home *** CD-ROM | disk | FTP | other *** search
/ Giga Games 1 / Giga Games.iso / net / go / prog / xgosh17.sh < prev    next >
Encoding:
Linux/UNIX/POSIX Shell Script  |  1993-06-20  |  132.3 KB  |  3,344 lines

  1. #! /bin/sh
  2. # This is a shell archive, meaning:
  3. # 1. Remove everything above the #! /bin/sh line.
  4. # 2. Save the resulting text in a file.
  5. # 3. Execute the file with /bin/sh (not csh) to create:
  6. #    Imakefile
  7. #    Makefile
  8. #    NOTES
  9. #    README
  10. #    TODO
  11. #    blackstone.bm
  12. #    blackstonemask.bm
  13. #    gosh.c
  14. #    gosh.h
  15. #    gray.bm
  16. #    whitestone.bm
  17. #    whitestonemask.bm
  18. #    xgosh
  19. #    xgosh.bm
  20. #    xgosh.c
  21. #    xgosh_title.bm
  22. # This archive created: Tue Sep 10 16:19:14 1991
  23. export PATH; PATH=/bin:/usr/bin:$PATH
  24. if test -f 'Imakefile'
  25. then
  26.     echo shar: "will not over-write existing file 'Imakefile'"
  27. else
  28. cat << \SHAR_EOF > 'Imakefile'
  29. #
  30. # xgosh
  31. # by Scott W. Hassan
  32. #
  33.  
  34. LOCAL_LIBRARIES = $(XTOOLLIB) $(XMULIB) $(XLIB)
  35.   SYS_LIBRARIES = -lm
  36.  
  37.    SRCS = xgosh.c gosh.c
  38.    OBJS = xgosh.o gosh.o
  39.  
  40. ComplexProgramTarget(xgosh)
  41. SHAR_EOF
  42. fi
  43. if test -f 'Makefile'
  44. then
  45.     echo shar: "will not over-write existing file 'Makefile'"
  46. else
  47. cat << \SHAR_EOF > 'Makefile'
  48. #
  49. # xgosh
  50. # by Scott W. Hassan
  51. #
  52.  
  53. xgosh : xgosh.o gosh.o
  54.     cc -o xgosh xgosh.o gosh.o -lXt -lXmu -lX11 -lm
  55. xgosh.o : xgosh.c gosh.c
  56.     cc -c xgosh.c
  57. gosh.o : gosh.c gosh.h
  58.     cc -c gosh.c
  59. clean:
  60.     rm -f *.o xgosh
  61. shar:
  62.     rm -f *.o xgosh; shar * > ../xgosh.sh
  63.  
  64.  
  65. SHAR_EOF
  66. fi
  67. if test -f 'NOTES'
  68. then
  69.     echo shar: "will not over-write existing file 'NOTES'"
  70. else
  71. cat << \SHAR_EOF > 'NOTES'
  72.  
  73. HISTORY:
  74.  
  75. *****************************************************************************
  76.  
  77. xnetgo
  78. January 1, 1991: Version 1.0 
  79. superseded by xgosh (below)
  80.  
  81. *****************************************************************************
  82.  
  83.  
  84. *****************************************************************************
  85.  
  86. xgosh
  87. January 5, 1991: Verson 1.2
  88.  
  89. New features:
  90.  - Last move cross marker added.
  91.  - command line geometry control added.
  92.  - automatic loading of loadfile at startup.
  93.  - icon bitmap added.
  94.  - glint added on stones.
  95.  - if color display is detected, then it
  96.    will try to use a colored board.
  97.  
  98. Bugs fixed:
  99.  - Loading segmentation fault fixed.
  100.  - board resizing problems fixed.
  101.  - mouse cursor shape icons fixed (hopefully.)
  102.  - DEC Window compatiblity (haven't tested but I think it works, now).
  103.  - Added a usleep command to slow down the display server loop.
  104.  
  105. *****************************************************************************
  106.  
  107. xgosh
  108. March 8, 1991: Version 1.5.2
  109.  
  110. *****************************************************************************
  111.  
  112. New Features:
  113.  
  114.   - better organized structured programming
  115.   - dual clocks
  116.   - gray stipple pattern for board
  117.   - various sizes of boards up to 50x50.
  118.   - 1xn Go works!
  119.   - new improved saving and loading works.
  120.   - new improved undo feature.
  121.   - blinking cross
  122.   - single display option
  123.   - more general handicap features.
  124.   - KO rule checking
  125.   - more messages.
  126.   - version display at start of execution.
  127.   - resizes correctly keeping with a correct ratio of the board size.
  128.   - title screen window
  129.   - the split of the info window from the board window.
  130.   - kill mode and scoring courtesy of Namhoon Yo.
  131.  
  132. Bugs fixed:
  133.   - handicap loading and saving fixed.
  134.   - KO handling fixed.
  135.   - initial turn loading fixed.
  136.  
  137. *****************************************************************************
  138.  
  139. xgosh
  140. April 10, 1991: Version 1.7
  141.   Modified by Eric Osman (osman@hannah.enet.dec.com)
  142.  
  143. *****************************************************************************
  144.  
  145.  - Use X toolkit instead of "select" so it works on both 
  146.    VMS as well as u*ix.
  147.  
  148. *****************************************************************************
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155. SHAR_EOF
  156. fi
  157. if test -f 'README'
  158. then
  159.     echo shar: "will not over-write existing file 'README'"
  160. else
  161. cat << \SHAR_EOF > 'README'
  162. *****************************************************************************
  163.  
  164.                 XGOSH
  165.  
  166.                Scott W. Hassan
  167.  
  168.                  Version 1.7
  169.  
  170.                 April 10, 1991
  171.  
  172.             Modified by Eric Osman 
  173.                 and Namhoon Yo.
  174.  
  175. *****************************************************************************
  176.  
  177. xgosh is a quick and easy game of Go.  It allows two people to play a
  178. game of Go easily over the network.  It uses the X Windows' feature of
  179. opening two displays (One for each player.)  
  180.  
  181. NOTE: Only one xgosh program runs per game.  It serves both displays at
  182. the same time.  This is unlike the older netgo programs when both players
  183. had to have a copy of the program and meet at a port.  X Windows handles
  184. all of this busy work.
  185.  
  186. usage:  xgosh [-options ...]
  187.  
  188. where options include:
  189.         -whitedisplay dpy         X server on which to display white player.
  190.                   will default to the current DISPLAY variable.
  191.         -blackdisplay dpy         X server on which to display black player.
  192.                   will default to the current DISPLAY variable.
  193.         -whitegeometry WxH+X+Y    size and location of white player's window.
  194.                   Defaults to 350x350.
  195.         -blackgeometry WxH+X+Y    size and location of black player's window.
  196.                   Defaults to 350x350.
  197.         -handicap number          number of black handicap stones.
  198.                   Default to zero.
  199.         -loadfile filename        filename to load in.
  200.                   Defaults to "xgosh.save"
  201.         -savefile filename        filename to save under.
  202.                   Defaults to "xgosh.save"
  203.     -blacktime seconds      Amount of time alotted for all black moves.
  204.                       Defaults to 1800 seconds (half hour)
  205.     -whitetime seconds      Amount of time alotted for all white moves.
  206.                       Defaults to 1800 seconds (half hour)
  207.     -graystipple          Use a gray background for the board color.
  208.     -size w h          Sets the size of the game board.
  209.                   Defaults to 19 19.
  210.                   Try playing 1 5 go, etc.
  211.     -beep              Sounds a beep after every move.
  212.     -singledisplay          Play a game using only one display.
  213.         -usage                    The parameter descriptions.
  214.  
  215. THE GAME:
  216.  
  217.     When activated, the game will display two windows, one on the
  218.     whitedisplay and the other on the blackdisplay.  These are the
  219.     title windows that are used to confirm the starting conditions
  220.     of the game.  Both players should click on their window and
  221.     the two game boards will appear afterwards.
  222.     
  223.     In the information window that appears, there will be two
  224.     stones in the upper left hand corner of
  225.     each window (one white and the other black.)  A box will
  226.     surround one of the stones indicating whose move it is.
  227.  
  228.     Below these two stones is a message: "Captured Stones: Black(0) 
  229.     White(0)."  These record the number of captured stones of each 
  230.     color.
  231.  
  232.     When the game begins the handicap stones will automatically
  233.     appear.  One of these days, I will allow the players to place the
  234.     stones themselves.
  235.  
  236. PLAYING THE GAME:
  237.  
  238.     Play will start as soon as the game is executed.  The first player's
  239.     clock will start clicking away immediately.  The short hand is
  240.     for minutes and the longer hand is for seconds.  I have not 
  241.     actually tested the accuracy of these clocks yet (please someone
  242.     do it for me!)
  243.  
  244.     To place a move, position the mouse over an intersection and
  245.     press the left mouse button.  A stone will be drawn in its
  246.     place.  The turn will then revert to the other player and his
  247.     clock will start ticking.
  248.  
  249.     A small blinking cross is left on the last piece played.  This is
  250.     very helpful for figuring out where your opponent played
  251.     last.
  252.  
  253.     To pass a turn, press the p key.
  254.     To undo a move, press the u key.
  255.     To quit the game, press the q key.
  256.     To load a game, press the l key.
  257.     To save the game, press the s key.
  258.     To enter the kill mode, press the k key.  This will allow
  259.     for any side to destroy whole groups by clicking on
  260.     one of the stones of the group.  Press the k key again to
  261.     resume the game.
  262.     To calculate the score of the board at any time during the
  263.     game, press c.  The algorithm assumes that all dead stones
  264.     are removed from the board prior to scoring.
  265.     
  266. Loading and Saving of games:
  267.  
  268.     I have to admit the saving and loading functions are pretty
  269.     primitive.  
  270.  
  271.     To Load a game:
  272.  
  273.     The strategy is to specify the filename at the command line
  274.     using the -loadfile argument.  When the game is started,
  275.     the file will automatically be loaded and play then
  276.     commences.
  277.     At any point during the game, press 'l' and the game
  278.     will be re-loaded.
  279.  
  280.     To Save a game:
  281.  
  282.     Any time during a game, press 's' and the game will be
  283.     saved.
  284.  
  285. Afterword:
  286.  
  287.     I hope you will like this program.
  288.  
  289.     Please send all comments to:
  290.  
  291.         hassan@informatics.wustl.edu
  292.  
  293.                     Thanks,
  294.                     
  295.                     Scott W. Hassan
  296.       
  297.  
  298.  
  299. p.s.  If you think this program has some merit, you too
  300.       can fund better versions of this program and
  301.       others like it by sending $10.00 to:
  302.  
  303.         Scott W. Hassan
  304.         Old Withey RD #1
  305.         Belmont, NY   14813
  306.  
  307.       Contributions will be greatly appreciated.  Thanks.
  308. SHAR_EOF
  309. fi
  310. if test -f 'TODO'
  311. then
  312.     echo shar: "will not over-write existing file 'TODO'"
  313. else
  314. cat << \SHAR_EOF > 'TODO'
  315. *****************************************************************************
  316. *
  317. * xgosh
  318. * April 8, 1991: Verson 1.6
  319. *
  320. *****************************************************************************
  321.  
  322.     Drop down Menus
  323.           save load pass help etc.        
  324.  
  325.     Print board
  326.  
  327. *****************************************************************************
  328. SHAR_EOF
  329. fi
  330. if test -f 'blackstone.bm'
  331. then
  332.     echo shar: "will not over-write existing file 'blackstone.bm'"
  333. else
  334. cat << \SHAR_EOF > 'blackstone.bm'
  335. #define blackstone_width 16
  336. #define blackstone_height 16
  337. #define blackstone_x_hot 7
  338. #define blackstone_y_hot 8
  339. static char blackstone_bits[] = {
  340.    0xc0, 0x03, 0xf0, 0x0f, 0xf8, 0x1f, 0xfc, 0x3f, 0xfe, 0x7f, 0xfe, 0x7f,
  341.    0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xef, 0xfe, 0x77, 0xfe, 0x7b,
  342.    0xfc, 0x3c, 0xf8, 0x1f, 0xf0, 0x0f, 0xc0, 0x03};
  343. SHAR_EOF
  344. fi
  345. if test -f 'blackstonemask.bm'
  346. then
  347.     echo shar: "will not over-write existing file 'blackstonemask.bm'"
  348. else
  349. cat << \SHAR_EOF > 'blackstonemask.bm'
  350. #define blackstonemask_width 16
  351. #define blackstonemask_height 16
  352. #define blackstonemask_x_hot 7
  353. #define blackstonemask_y_hot 8
  354. static char blackstonemask_bits[] = {
  355.    0xc0, 0x03, 0xf0, 0x0f, 0xf8, 0x1f, 0xfc, 0x3f, 0xfe, 0x7f, 0xfe, 0x7f,
  356.    0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xfe, 0x7f,
  357.    0xfc, 0x3f, 0xf8, 0x1f, 0xf0, 0x0f, 0xc0, 0x03};
  358. SHAR_EOF
  359. fi
  360. if test -f 'gosh.c'
  361. then
  362.     echo shar: "will not over-write existing file 'gosh.c'"
  363. else
  364. cat << \SHAR_EOF > 'gosh.c'
  365. /*****************************************************************************
  366.  *
  367.  * gosh.c
  368.  * 
  369.  * gosh is a set of Go functions.
  370.  *
  371.  ****************************************************************************/
  372.  
  373. /*#define DEBUGFLAG*/
  374. #define MODULE "gosh"
  375.  
  376. #include <stdio.h>
  377. #include "gosh.h"
  378.  
  379. /*****************************************************************************
  380.  * other(color)
  381.  *   int color;
  382.  * other will return the opposite color of 'color'.
  383.  * if color is black, then other(c) will be white.
  384.  * if color is white, then other(c) will be black.
  385.  *****************************************************************************/
  386.  
  387. int other(color)
  388.      int color;
  389. {
  390.   return( (color==BLACK) ? WHITE : BLACK);
  391. }
  392.  
  393. /*****************************************************************************
  394.  * IsInBoard(board, x, y)
  395.  *  - returns TRUE is x,y is in the bounds of the board. 
  396.  *  - returns FALSE if not.
  397.  ****************************************************************************/
  398.  
  399. int IsInBoard(board, x, y)
  400.      Board *board;
  401.      int x,y;
  402. {
  403.   if(x>=0 && y>=0 && x<board->sizex && y<board->sizey)
  404.     return(TRUE);
  405.   else
  406.     return(FALSE);
  407. }
  408.  
  409. /*****************************************************************************
  410.  * AddStone(board, x, y, color)
  411.  *  - Adds a stone to board at position x,y of color.
  412.  ****************************************************************************/
  413.  
  414. int AddStone(board, x, y, color)
  415.      Board *board;
  416.      int x,y;
  417.      int color;
  418. {
  419.   if(IsInBoard(board, x, y))
  420.     board->grid[x][y] = color;
  421.   else
  422.     printf("Error in AddStone: x,y coordinates out of bounds\n");
  423. }
  424.  
  425. /*****************************************************************************
  426.  * GetStone(board, x, y)
  427.  *  - returns the stone at x,y.
  428.  ****************************************************************************/
  429.  
  430. int GetStone(board, x, y)
  431.      Board *board;
  432.      int x,y;
  433. {
  434.   if(IsInBoard(board, x, y))
  435.     return(board->grid[x][y]);
  436.   else 
  437.     printf("Error in GetStone: x,y coordinates out of bounds\n");
  438.   return(FALSE);
  439. }
  440.  
  441. /*****************************************************************************
  442.  * CountStones(board, color)
  443.  *  - CountStones examines the playing board and counts up the number of 'color'ed
  444.  *    stones.
  445.  *****************************************************************************/
  446.  
  447. int CountStones(board, color)
  448.      Board *board;
  449.      int color;
  450. {
  451.   register int i,j;
  452.   register int count=0;
  453.  
  454.   for(i=0; i<board->sizex; i++)
  455.     for(j=0; j<board->sizey; j++)
  456.       if(board->grid[i][j]==color)
  457.     count++;
  458.   return(count);
  459. }
  460.  
  461. /*****************************************************************************
  462.  * CountStones(board)
  463.  * CountStones examines the playing board and counts all of the stones played.
  464.  *****************************************************************************/
  465.  
  466. int CountAllStones(board)
  467.      Board *board;
  468. {
  469.   register int i,j;
  470.   register int count=0;
  471.   for(i=0; i<board->sizex; i++)
  472.     for(j=0; j<board->sizey; j++)
  473.       if(board->grid[i][j]!=EMPTY)
  474.     count++;
  475.   return(count);
  476. }
  477.  
  478. CountCapturedStones(board, cbs, cws)
  479.      Board *board;
  480.      int *cbs, *cws;
  481. {
  482.   MoveTree *head, *node;
  483.  
  484.  
  485.   *cbs = *cws = 0;
  486.   head = board->movetree->next;
  487.  
  488.   if(!IsEmpty(head)) {
  489.     while(!IsEmpty(head)) {
  490.       node = head->kill;
  491.       if(!IsEmpty(node)) {
  492.     node = node->next;
  493.     while(!IsEmpty(node)) {
  494.       if(node->color == BLACK)
  495.         (*cbs)++;
  496.       else if(node->color == WHITE)
  497.         (*cws)++;
  498.       node = node->next;
  499.     }
  500.       }
  501.       head = head->next;
  502.     }
  503.   }
  504. }
  505.  
  506. /*****************************************************************************
  507.  * InitBoard(board)
  508.  *  - clear the board of stones.
  509.  *****************************************************************************/
  510.  
  511. InitBoard(board)
  512.      Board *board;
  513. {
  514.   register int i,j;
  515.   for(i=0; i<board->sizex; i++)
  516.     for(j=0; j<board->sizey; j++)
  517.       board->grid[i][j] = EMPTY;
  518. }
  519.  
  520. /*****************************************************************************
  521.  * InitPlayBoard(board, handicap)
  522.  *  - clear board and set the handicap stones.
  523.  ****************************************************************************/
  524.  
  525. InitPlayBoard(board)
  526.      Board *board;
  527. {
  528.   InitBoard(board);
  529.  
  530.   switch(board->handicap) {
  531.     case(17): AddStone(board,6,board->sizey-7,BLACK);
  532.     case(16): AddStone(board,board->sizex-7,6,BLACK);
  533.     case(15): AddStone(board,board->sizex-7,board->sizey-7,BLACK);
  534.     case(14): AddStone(board,6,6,BLACK);
  535.     case(13): AddStone(board,board->sizex-3,2,BLACK);
  536.     case(12): AddStone(board,2,board->sizey-3,BLACK);
  537.     case(11): AddStone(board,board->sizex-3,board->sizey-3,BLACK);
  538.     case(10): AddStone(board,2,2,BLACK);
  539.     case( 9): AddStone(board,board->sizex/2,board->sizey-4,BLACK);
  540.     case( 8): AddStone(board,3,board->sizey/2,BLACK);
  541.     case( 7): AddStone(board,board->sizex/2,3,BLACK);
  542.     case( 6): AddStone(board,board->sizex-4,board->sizey/2,BLACK);
  543.     case( 5): AddStone(board,board->sizex/2,board->sizey/2,BLACK);
  544.     case( 4): AddStone(board,board->sizex-4,board->sizey-4,BLACK);
  545.     case( 3): AddStone(board,3,board->sizey-4,BLACK);
  546.     case( 2): AddStone(board,board->sizex-4,3,BLACK);
  547.     case( 1): AddStone(board,3,3,BLACK);
  548.   }
  549. }
  550.  
  551. /*****************************************************************************
  552.  * CheckLibs(board, workboard, x, y, color)
  553.  *  - returns the number of liberties if a stone of color is placed
  554.  *    at position x,y.
  555.  ****************************************************************************/
  556.  
  557. int CheckLibs(board, workboard, x,y,color)
  558.      Board *board;
  559.      Board *workboard;
  560.      int x,y,color;
  561. {
  562.   DEBUG("CheckLibs", IN);
  563.  
  564.   /* is the stone is the bounds of the board? */
  565.   if(IsInBoard(board, x, y)==FALSE)
  566.     return(0);
  567.  
  568.   /* is the position already worked on? */
  569.   if(GetStone(workboard, x, y) != EMPTY)
  570.     return(0);
  571.  
  572.   /* is the position a liberty? */
  573.   if(GetStone(board, x, y) == EMPTY) {
  574.     AddStone(workboard, x, y, LIB);
  575.     return(1);
  576.   }
  577.  
  578.   /* is the position the other players stone? */
  579.   if(GetStone(board, x, y) == other(color)) {
  580.     AddStone(workboard, x, y, other(color));
  581.     return(0);
  582.   }
  583.  
  584.   /* Mark this position as your stone. */
  585.   AddStone(workboard,x,y,color);
  586.   
  587.   /* Check liberties surrounding this position. */
  588.   return(CheckLibs(board, workboard, x+1, y, color) +
  589.      CheckLibs(board, workboard, x-1, y, color) +
  590.      CheckLibs(board, workboard, x, y-1, color) +
  591.      CheckLibs(board, workboard, x, y+1, color));
  592. }
  593.  
  594. /*****************************************************************************
  595.  * PlaceStoneOnBoard(board, x, y, color)
  596.  *   Places a stone on board at position x,y of color.  It will remove
  597.  *   dead groups in the process.
  598.  *   the number of liberties are returned. 
  599.  ****************************************************************************/
  600.  
  601. int PlaceStoneOnBoard(board, x, y, color)
  602.      Board *board;
  603.      int x,y,color;
  604. {
  605.   Board workboard;
  606.  
  607.   DEBUG("PlaceStoneOnBoard", IN);
  608.   workboard.sizex = board->sizex;
  609.   workboard.sizey = board->sizey;
  610.  
  611.   InitBoard(&workboard);
  612.   if(CheckLibs(board, &workboard, x+1, y, other(color)) == 0)
  613.     KillStones(board, x+1, y, other(color));
  614.  
  615.   InitBoard(&workboard);
  616.   if(CheckLibs(board, &workboard, x-1, y, other(color)) == 0)
  617.     KillStones(board, x-1, y, other(color));
  618.  
  619.   InitBoard(&workboard);
  620.   if(CheckLibs(board, &workboard, x, y+1, other(color)) == 0)
  621.     KillStones(board, x, y+1, other(color));
  622.  
  623.   InitBoard(&workboard);
  624.   if(CheckLibs(board, &workboard, x, y-1, other(color)) == 0)
  625.     KillStones(board, x, y-1, other(color));
  626.  
  627.   InitBoard(&workboard);
  628.   DEBUG("PlaceStoneOnBoard", OUT);
  629.   return(CheckLibs(board, &workboard, x+1, y, color) +
  630.          CheckLibs(board, &workboard, x-1, y, color) +
  631.          CheckLibs(board, &workboard, x, y+1, color) +
  632.      CheckLibs(board, &workboard, x, y-1, color));
  633. }
  634.  
  635. /*****************************************************************************
  636.  * KillStone(board, x, y, color)
  637.  *  - removes the dead stones starting from x,y of color.
  638.  *****************************************************************************/
  639.  
  640. KillStones(board, x, y, color)
  641.      Board *board;
  642.      int x,y,color;
  643. {
  644.   DEBUG("KillStones", IN);
  645.   if(IsInBoard(board, x, y)==FALSE)
  646.     return;
  647.  
  648.   if(GetStone(board, x, y) == color) {
  649.     AddStone(board, x, y, EMPTY);
  650.     if(board->movetree->next->kill == NULL) {
  651.       board->movetree->next->kill = InitMoveTree();
  652.     } 
  653.     AddNewNode(board->movetree->next->kill, x, y, color);
  654.   }
  655.   else
  656.     return;
  657.  
  658.   KillStones(board, x+1, y, color);
  659.   KillStones(board, x-1, y, color);
  660.   KillStones(board, x, y-1, color);
  661.   KillStones(board, x, y+1, color);
  662. }
  663.  
  664. /*****************************************************************************
  665.  * InitMoveTree()
  666.  ****************************************************************************/
  667.  
  668. MoveTree *InitMoveTree()
  669. {
  670.   MoveTree *tree;
  671.   tree = (MoveTree *)malloc(sizeof(MoveTree));
  672.   tree->next = NULL;
  673.   return(tree);
  674. }
  675. /*****************************************************************************
  676.  * DestroyMoveTree()
  677.  ****************************************************************************/
  678.  
  679. DestroyMoveTree(head)
  680.      MoveTree *head;
  681. {
  682.   MoveTree *end;
  683.   if(head != NULL) {
  684.     end = head->next;
  685.     while(end != NULL) {
  686.       free((char *)head);
  687.       head = end;
  688.       end = head->next;
  689.     }
  690.   }
  691. }
  692.  
  693. /*****************************************************************************
  694.  * EndOfList(head)
  695.  ****************************************************************************/
  696.  
  697. MoveTree *EndOfList(head)
  698.      MoveTree *head;
  699. {
  700.   if(head != NULL)     
  701.     while(head->next != NULL)
  702.       head = head->next;
  703.   return(head);
  704. }
  705.  
  706. /*****************************************************************************
  707.  * IsEmpty(node)
  708.  ****************************************************************************/
  709.  
  710. int IsEmpty(node)
  711.      MoveTree *node;
  712. {
  713.   if(node == NULL)
  714.     return(TRUE);
  715.   else
  716.     return(FALSE);
  717. }
  718.  
  719. /*****************************************************************************
  720.  * NextNode(node)
  721.  ****************************************************************************/
  722.  
  723. MoveTree *NextNode(node)
  724.      MoveTree *node;
  725. {
  726.   if(!IsEmpty(node))
  727.     node = node->next;
  728.   return(node);
  729. }
  730.  
  731. /*****************************************************************************
  732.  * PrevNode(head,node)
  733.  ****************************************************************************/
  734.  
  735. MoveTree *PrevNode(head, node)
  736.      MoveTree *head, *node;
  737. {
  738.   if(!IsEmpty(head) && !(IsEmpty(head->next)))
  739.     while(head->next != NULL && head->next != node) 
  740.       head = NextNode(head);
  741.   return(head);
  742. }
  743.  
  744. /*****************************************************************************
  745.  * InsertNode(head, node)
  746.  ****************************************************************************/
  747.  
  748. InsertNode(head, node)
  749.      MoveTree *head, *node;
  750. {
  751.   node->next = head->next;
  752.   head->next = node;
  753. }
  754.  
  755. /*****************************************************************************
  756.  * AddNewNode(head, x, y, color)
  757.  ****************************************************************************/
  758. MoveTree *AddNewNode(head, x, y, color)
  759.      MoveTree *head;
  760.      int x,y, color;
  761. {
  762.   MoveTree *node;
  763.   node = InitMoveTree();
  764.   InsertNode(head, node);
  765.   node->x = x;
  766.   node->y = y;
  767.   node->color = color;
  768.   node->kill = NULL;
  769.   return(node);
  770. }
  771.  
  772. DeleteNode(head)
  773.      MoveTree *head;
  774. {
  775.   MoveTree *node;
  776.  
  777.   if(!IsEmpty(head->next)) {
  778.     node = NextNode(head);
  779.     if(!IsEmpty(node) && !IsEmpty(node->kill))
  780.       DestroyMoveTree(node->kill);
  781.     head->next = NextNode(node);
  782.     free(node);
  783.   }
  784. }
  785.  
  786. /*****************************************************************************
  787.  * PrintList(head)
  788.  ****************************************************************************/
  789. PrintList(head)
  790.      MoveTree *head;
  791. {
  792.   int i;
  793.   i=1;
  794.   if(!IsEmpty(head)) {
  795.     head = NextNode(head);
  796.     while(!IsEmpty(head)) {
  797.       if(head->color == WHITE)
  798.     printf("%d: %dx%d WHITE\n", i, head->x, head->y);
  799.       else
  800.     printf("%d: %dx%d BLACK\n", i, head->x, head->y);
  801.       i++;
  802.       if(!IsEmpty(head->kill)) {
  803.     printf("Start of Kill list:\n");
  804.     PrintList(head->kill);
  805.     printf("end of Kill list.\n");
  806.       }
  807.       head = NextNode(head);
  808.     }
  809.   }
  810. }
  811.  
  812. /*****************************************************************************
  813.  * Length(head) - length of the list
  814.  ****************************************************************************/
  815. Length(head)
  816.      MoveTree *head;
  817. {
  818.   int i;
  819.   i=0;
  820.   if(!IsEmpty(head)) {
  821.     head = NextNode(head);
  822.     while(!IsEmpty(head)) {
  823.       i++;
  824.       head = NextNode(head);
  825.     }
  826.   }
  827.   return(i);
  828. }
  829.  
  830. /*****************************************************************************
  831.  * UndoLastMove(board)
  832.  ****************************************************************************/
  833.  
  834. int UndoLastMove(board)
  835.      Board *board;
  836. {
  837.   int kills;
  838.   MoveTree *head;
  839.  
  840.   head = board->movetree->next;
  841.   kills = 0;
  842.  
  843.   if(!IsEmpty(head)) {
  844.     if(head->color != PASS && head->color != KILL)
  845.       AddStone(board, head->x, head->y, EMPTY);
  846.     head = head->kill;
  847.     if(!IsEmpty(head)) 
  848.       head = head->next;
  849.       while(head != NULL) {
  850.     AddStone(board, head->x, head->y, head->color);
  851.     head = head->next;
  852.     kills++;
  853.       }
  854.   }
  855.   DeleteNode(board->movetree);
  856.   return(kills);
  857. }
  858.  
  859. /*****************************************************************************
  860.  * LoadMoves(board)
  861.  ****************************************************************************/
  862.  
  863. MoveTree *LoadMoves(board, filename)
  864.      Board *board;
  865. {
  866.   FILE *fp;
  867.   char s[81];
  868.   int x,y,color;
  869.   MoveTree *lastmove;
  870.   lastmove = NULL;
  871.   
  872.   board->movetree = InitMoveTree();
  873.   if((fp = fopen(filename, "r"))!=NULL) {
  874.     fscanf(fp, "%s %d %d", s, &(board->sizex), &(board->sizey));
  875.     fscanf(fp, "%s %d", s, &(board->handicap));
  876.     InitPlayBoard(board);
  877.     while(!feof(fp)) {
  878.       fscanf(fp, "%d %d %d", &x, &y, &color);
  879.       if(color != PASS) {
  880.     AddStone(board, x, y, color);
  881.     lastmove = AddNewNode(board->movetree, x, y, color);
  882.     PlaceStoneOnBoard(board, x, y, color);
  883.       } else
  884.     AddNewNode(board->movetree, x, y, color);
  885.     }
  886.     fclose(fp);
  887.   }
  888.   return(lastmove);
  889. }
  890.  
  891. /*****************************************************************************
  892.  * SaveMoves(board)
  893.  ****************************************************************************/
  894.  
  895. SaveMoves(board, filename)
  896.      Board *board;
  897. {
  898.   FILE *fp;
  899.   MoveTree *node;
  900.   node = board->movetree;
  901.   if(!IsEmpty(node)) {
  902.     node = EndOfList(node);
  903.     if((fp = fopen(filename, "w"))!=0L) {
  904.       fprintf(fp, "size: %d %d\n",board->sizex, board->sizey);
  905.       fprintf(fp, "handicap: %d\n",board->handicap);
  906.       while(!IsEmpty(node) && board->movetree != node) {
  907.     fprintf(fp,"%d %d %d\n",node->x, node->y, node->color);
  908.     node = PrevNode(board->movetree, node);
  909.       }
  910.       fclose(fp);
  911.     }
  912.   }
  913. }
  914.  
  915. /*****************************************************************************
  916.  * PrintMoves(board)
  917.  ****************************************************************************/
  918.  
  919. PrintMoves(board, filename)
  920.      Board *board;
  921. {
  922.   FILE *fp;
  923.   MoveTree *node;
  924.   int i,j;
  925.  
  926.   if((fp = fopen(filename, "w")) != 0L) {
  927.     fprintf(fp, "%d %d BoardSize \n", board->sizex, board->sizey);
  928.     for(i=0; i<board->sizex; i++) {
  929.       for(j=0; j<board->sizey; j++) {
  930.     if(board->grid[i][j]==BLACK)
  931.       fprintf(fp, "%d %d () Black \n",i,j);
  932.     else if(board->grid[i][j]==WHITE)
  933.       fprintf(fp, "%d %d () White \n",i,j);
  934.       }
  935.     }
  936.     fclose(fp);
  937.   }
  938. }
  939.  
  940. /*****************************************************************************
  941.  * NeighborColor(board,x,y)
  942.  ****************************************************************************/
  943. /* The followings are calulation */
  944. NeighborColor(board,x,y)
  945.      Board *board;
  946.      int x,y;
  947. {
  948.   int color = EMPTY;
  949.   int i,j;
  950.   for(i=x+1; i < board->sizex; i++)
  951.     if(board->grid[i][y] != EMPTY) {
  952.       color = board->grid[i][y];
  953.       break;
  954.     }
  955.   for(i=x-1;i>=0;i--) {
  956.     if(board->grid[i][y] != EMPTY) {
  957.       if(color != EMPTY && board->grid[i][y]!=color) 
  958.     return EMPTY;
  959.       else {
  960.     color = board->grid[i][y];
  961.     break;
  962.       }
  963.     }
  964.   }
  965.  
  966.   for(j=y+1;j<board->sizey;j++) {
  967.     if(board->grid[x][j] != EMPTY) {
  968.       if(color != EMPTY && board->grid[x][j]!=color) return EMPTY;
  969.       else {
  970.     color = board->grid[x][j];
  971.     break;
  972.       }
  973.     }
  974.   }
  975.   for(j=y-1; j>=0; j--) {
  976.     if(board->grid[x][j] != EMPTY) {
  977.       if(color != EMPTY && board->grid[x][j]!=color) 
  978.     return EMPTY;
  979.       else {
  980.     color = board->grid[x][j];
  981.     break;
  982.       }
  983.     }
  984.   }
  985.   return color;
  986. }
  987.  
  988. CalcuBoard(board, white, black, undet)
  989.      Board *board;
  990.      int *white, *black, *undet;
  991. {
  992.   int i,j,k;
  993.   *white=0;
  994.   *black=0;
  995.   *undet=0;
  996.   for(i=0; i<board->sizex; i++)
  997.     for(j=0; j<board->sizey; j++)
  998.       if (board->grid[i][j] == EMPTY) {
  999.     if(NeighborColor(board,i,j)==BLACK) 
  1000.       (*black)++;
  1001.     else if(NeighborColor(board,i,j)==WHITE) 
  1002.       (*white)++;
  1003.     else 
  1004.       (*undet)++;
  1005.       }
  1006. }
  1007. SHAR_EOF
  1008. fi
  1009. if test -f 'gosh.h'
  1010. then
  1011.     echo shar: "will not over-write existing file 'gosh.h'"
  1012. else
  1013. cat << \SHAR_EOF > 'gosh.h'
  1014. /*****************************************************************************
  1015.  *
  1016.  * gosh.h
  1017.  *
  1018.  ****************************************************************************/
  1019.  
  1020. #define EXIT_FAILURE -1
  1021.  
  1022.  
  1023. #define EMPTY -1
  1024. #define WHITE 0
  1025. #define BLACK 1
  1026. #define LIB 2
  1027.  
  1028. #define KILL -3
  1029. #define PASS -2
  1030. #define NOMOVE -1
  1031.  
  1032. #ifndef TRUE
  1033. #define TRUE 1
  1034. #endif
  1035.  
  1036. #define FALSE 0
  1037.  
  1038. #define MAXX 50
  1039. #define MAXY 50
  1040.  
  1041. struct MOVETREE {
  1042.   int x, y;       /* the x and y coordinates of the stone. */
  1043.   int color;      /* the color of the stone.               */
  1044.   char *comment;  /* a comment attached to the node.       */
  1045.   struct MOVETREE *next; /* next move tree.                       */
  1046.   struct MOVETREE *kill; /* list of killed stones.                */
  1047. };
  1048.  
  1049. typedef struct MOVETREE MoveTree;
  1050.  
  1051. struct BOARD {
  1052.   int sizex, sizey;
  1053.   MoveTree *movetree;
  1054.   int handicap;
  1055.   int grid[MAXX][MAXY];
  1056. };
  1057.  
  1058. typedef struct BOARD Board;
  1059.  
  1060. #define FORI(n,stmts) { int I; for(I=0; I<n; I++) { stmts } }
  1061.  
  1062. /******************************************************************************/
  1063.  
  1064. #ifdef TIMEFLAG
  1065.   long clock();
  1066. #define TIMESTART { long ts_timer; ts_timer = clock()
  1067. #define TIMEEND(str) printf("%s: TIME(%s)=%10.4f\n",MODULE,(str), (float)(clock(
  1068. ) - ts_timer) / 1000.0); }
  1069. #else
  1070. #define TIMESTART ;
  1071. #define TIMEEND(str) ;
  1072. #endif
  1073.  
  1074. #define IN 1
  1075. #define OUT 0
  1076.  
  1077. #ifdef DEBUGFLAG
  1078. #define DEBUG(str,type) if(type==IN) printf("%s: %s IN\n",MODULE,str); else if (type==OUT) printf("%s: %s OUT\n",MODULE,str); else printf("%s: %s\n", MODULE, str); fflush(stdout);
  1079. #else
  1080. #define DEBUG(str,type) ;
  1081. #endif
  1082.  
  1083. /* return the maximum of two numbers. */
  1084. #ifndef MAX
  1085. #define MAX(x,y) (((x)>(y)) ? (x) : (y))
  1086. #endif
  1087.  
  1088. /* return the minimum of two numbers. */
  1089. #ifndef MIN
  1090. #define MIN(x,y) (((x)<(y)) ? (x) : (y))
  1091. #endif
  1092.  
  1093. MoveTree *InitMoveTree();
  1094. int DestroyMoveTree();
  1095. MoveTree *EndOfList();
  1096. MoveTree *NextNode();
  1097. MoveTree *PrevNode();
  1098. int InsertNode();
  1099. int AddNodeAtEnd();
  1100. MoveTree *AddNewNode();
  1101. int PrintList();
  1102. MoveTree *LoadMoves();
  1103.  
  1104.  
  1105. /******************************************************************************/
  1106.  
  1107.  
  1108.  
  1109. SHAR_EOF
  1110. fi
  1111. if test -f 'gray.bm'
  1112. then
  1113.     echo shar: "will not over-write existing file 'gray.bm'"
  1114. else
  1115. cat << \SHAR_EOF > 'gray.bm'
  1116. #define gray_width 2
  1117. #define gray_height 2
  1118. static char gray_bits[] = {
  1119.    0x01, 0x02};
  1120. SHAR_EOF
  1121. fi
  1122. if test -f 'whitestone.bm'
  1123. then
  1124.     echo shar: "will not over-write existing file 'whitestone.bm'"
  1125. else
  1126. cat << \SHAR_EOF > 'whitestone.bm'
  1127. #define whitestone_width 16
  1128. #define whitestone_height 16
  1129. #define whitestone_x_hot 7
  1130. #define whitestone_y_hot 8
  1131. static char whitestone_bits[] = {
  1132.    0xc0, 0x03, 0x30, 0x0c, 0x08, 0x10, 0x04, 0x20, 0x02, 0x40, 0x02, 0x40,
  1133.    0x01, 0x80, 0x01, 0x80, 0x01, 0x90, 0x01, 0x90, 0x02, 0x48, 0x02, 0x44,
  1134.    0x04, 0x23, 0x08, 0x10, 0x30, 0x0c, 0xc0, 0x03};
  1135. SHAR_EOF
  1136. fi
  1137. if test -f 'whitestonemask.bm'
  1138. then
  1139.     echo shar: "will not over-write existing file 'whitestonemask.bm'"
  1140. else
  1141. cat << \SHAR_EOF > 'whitestonemask.bm'
  1142. #define whitestonemask_width 16
  1143. #define whitestonemask_height 16
  1144. #define whitestonemask_x_hot 7
  1145. #define whitestonemask_y_hot 8
  1146. static char whitestonemask_bits[] = {
  1147.    0xc0, 0x03, 0xf0, 0x0f, 0xf8, 0x1f, 0xfc, 0x3f, 0xfe, 0x7f, 0xfe, 0x7f,
  1148.    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xfe, 0x7f,
  1149.    0xfc, 0x3f, 0xf8, 0x1f, 0xf0, 0x0f, 0xc0, 0x03};
  1150. SHAR_EOF
  1151. fi
  1152. if test -f 'xgosh'
  1153. then
  1154.     echo shar: "will not over-write existing file 'xgosh'"
  1155. else
  1156. cat << \SHAR_EOF > 'xgosh'
  1157. ò≡ .1æ ..û≡Makefile░≡NOTES╣≡README└≡TODOú±
  1158. blackstone.bm¡±blackstonemask.bm≥gosh.c!≥gosh.hL≥gray.bmM≥
  1159. whitestone.bm]≥whitestonemask.bm^≥xgosh.bma≥xgosh.cf≥xgosh_title.bmj≥╨xgosh
  1160. SHAR_EOF
  1161. chmod +x 'xgosh'
  1162. fi
  1163. if test -f 'xgosh.bm'
  1164. then
  1165.     echo shar: "will not over-write existing file 'xgosh.bm'"
  1166. else
  1167. cat << \SHAR_EOF > 'xgosh.bm'
  1168. #define xgosh_width 64
  1169. #define xgosh_height 64
  1170. static char xgosh_bits[] = {
  1171.    0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x42, 0xff, 0xff, 0xff, 0xff,
  1172.    0xff, 0xff, 0xff, 0x42, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x42,
  1173.    0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x42, 0x82, 0x20, 0x08, 0x82,
  1174.    0x20, 0x08, 0x82, 0x42, 0x82, 0x20, 0x08, 0x82, 0x70, 0x08, 0x82, 0x42,
  1175.    0x82, 0x20, 0x08, 0x82, 0xf8, 0x08, 0x82, 0x42, 0xff, 0xff, 0xff, 0xff,
  1176.    0xff, 0xff, 0xff, 0x42, 0x82, 0x20, 0x08, 0x82, 0xf8, 0x08, 0x82, 0x42,
  1177.    0x82, 0x20, 0x08, 0x82, 0x70, 0x08, 0x82, 0x42, 0x82, 0x20, 0x08, 0x82,
  1178.    0x20, 0x08, 0x82, 0x42, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x42,
  1179.    0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x42, 0xff, 0xff, 0xff, 0xff,
  1180.    0xff, 0xff, 0xff, 0x42, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x42,
  1181.    0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x42, 0x82, 0x20, 0x08, 0x82,
  1182.    0x20, 0x08, 0x82, 0x42, 0x82, 0x20, 0x1c, 0x82, 0x20, 0x08, 0x82, 0x42,
  1183.    0x82, 0x20, 0x3e, 0x82, 0x20, 0x08, 0x82, 0x42, 0xff, 0xff, 0xff, 0xff,
  1184.    0xff, 0xff, 0xff, 0x42, 0x82, 0x20, 0x3e, 0x82, 0x20, 0x08, 0x82, 0x42,
  1185.    0x82, 0x20, 0x1c, 0x82, 0x20, 0x08, 0x82, 0x42, 0x82, 0x20, 0x08, 0x82,
  1186.    0x20, 0x08, 0x82, 0x42, 0x82, 0x20, 0x08, 0x82, 0x70, 0x08, 0x82, 0x42,
  1187.    0x82, 0x20, 0x08, 0x82, 0xf8, 0x08, 0x82, 0x42, 0xff, 0xff, 0xff, 0xff,
  1188.    0xff, 0xff, 0xff, 0x42, 0x82, 0x20, 0x08, 0x82, 0xf8, 0x08, 0x82, 0x42,
  1189.    0x82, 0x20, 0x08, 0x82, 0x70, 0x08, 0x82, 0x42, 0x82, 0x20, 0x08, 0x82,
  1190.    0x20, 0x08, 0x82, 0x42, 0xc2, 0x21, 0x08, 0x82, 0x20, 0x08, 0x87, 0x42,
  1191.    0x22, 0x22, 0x08, 0x82, 0x20, 0x88, 0x8f, 0x42, 0x3f, 0xfe, 0xff, 0xff,
  1192.    0xff, 0xff, 0xff, 0x42, 0x22, 0x22, 0x08, 0x82, 0x20, 0x88, 0x8f, 0x42,
  1193.    0xc2, 0x21, 0x08, 0x82, 0x20, 0x08, 0x87, 0x42, 0x82, 0x20, 0x08, 0x82,
  1194.    0x20, 0x08, 0x82, 0x42, 0x82, 0x20, 0x08, 0x82, 0x70, 0x1c, 0x87, 0x42,
  1195.    0x82, 0x20, 0x08, 0x82, 0xf8, 0xbe, 0x88, 0x42, 0xff, 0xff, 0xff, 0xff,
  1196.    0xff, 0xff, 0xf8, 0x42, 0x82, 0x20, 0x08, 0x82, 0xf8, 0xbe, 0x88, 0x42,
  1197.    0x82, 0x20, 0x08, 0x82, 0x70, 0x1c, 0x87, 0x42, 0x82, 0x20, 0x08, 0x82,
  1198.    0x20, 0x08, 0x82, 0x42, 0x82, 0x70, 0x08, 0x87, 0x20, 0x1c, 0x82, 0x42,
  1199.    0x82, 0x88, 0x88, 0x88, 0x20, 0x3e, 0x82, 0x42, 0xff, 0x8f, 0xff, 0xf8,
  1200.    0xff, 0xff, 0xff, 0x42, 0x82, 0x88, 0x88, 0x88, 0x20, 0x3e, 0x82, 0x42,
  1201.    0x82, 0x70, 0x08, 0x87, 0x20, 0x1c, 0x82, 0x42, 0x82, 0x20, 0x08, 0x82,
  1202.    0x20, 0x08, 0x82, 0x42, 0x82, 0x20, 0x08, 0x82, 0x70, 0x1c, 0x82, 0x42,
  1203.    0x82, 0x20, 0x08, 0x82, 0x88, 0x22, 0x82, 0x42, 0xff, 0xff, 0xff, 0xff,
  1204.    0x8f, 0xe3, 0xff, 0x42, 0x82, 0x20, 0x08, 0x82, 0x88, 0x22, 0x82, 0x42,
  1205.    0x82, 0x20, 0x08, 0x82, 0x70, 0x1c, 0x82, 0x42, 0x82, 0x20, 0x08, 0x82,
  1206.    0x20, 0x08, 0x82, 0x42, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x42,
  1207.    0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x42, 0xff, 0xff, 0xff, 0xff,
  1208.    0xff, 0xff, 0xff, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
  1209.    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x43, 0x00, 0x00, 0x00, 0x00,
  1210.    0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
  1211.    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
  1212.    0x00, 0x00, 0x00, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
  1213.    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  1214. SHAR_EOF
  1215. fi
  1216. if test -f 'xgosh.c'
  1217. then
  1218.     echo shar: "will not over-write existing file 'xgosh.c'"
  1219. else
  1220. cat << \SHAR_EOF > 'xgosh.c'
  1221. /*****************************************************************************
  1222.  *
  1223.  * xgosh 
  1224.  * (x) (go) by (s)cott (h)assan
  1225.  *
  1226.  * Sept. 11, 1990
  1227.  *
  1228.  * Version 1.7 Apr 10, 1991
  1229.  *
  1230.  *    Modified by Eric Osman (osman@hannah.enet.dec.com)
  1231.  *        Use X toolkit instead of "select" so it works on both
  1232.  *        vms as well as u*ix.
  1233.  *
  1234.  * Version 1.6 March 12, 1991
  1235.  * Version 1.5.2 March 8, 1991
  1236.  * Version 1.5 February 28, 1991
  1237.  * Version 1.2 January 5, 1991
  1238.  *
  1239.  * hassan@acsu.buffalo.edu
  1240.  * hassan@informatics.wustl.edu
  1241.  *
  1242.  * DESCRIPTION:
  1243.  *
  1244.  * xgosh is a quick and easy game of Go.  It allows two people to play a
  1245.  * game of Go easily over the Network.  It uses the X Windows' feature of
  1246.  * opening two displays (One for each player.)
  1247.  *
  1248.  * NOTE: Only one xgosh program runs per game.  It serves both displays at
  1249.  * the same time.  This is unlike the older netgo programs when both players
  1250.  * had to have a copy of the program and meet at a port.  X Windows handles
  1251.  * all of this busywork.
  1252.  *
  1253.  ****************************************************************************/
  1254.  
  1255. #define MODULE "xgosh"
  1256. /*#define DEBUGFLAG*/
  1257.  
  1258. #define VERSION "1.7"
  1259.  
  1260. #include <X11/Xlib.h>
  1261. #include <X11/Xutil.h>
  1262. #include <X11/X.h>
  1263. #include <X11/Xatom.h>
  1264. #include <X11/Intrinsic.h>
  1265.  
  1266. #include <sys/time.h>
  1267. #include <sys/types.h>
  1268. #include <stdlib.h>
  1269. #include <stdio.h>
  1270. #include <ctype.h>
  1271.  
  1272. #include <math.h>
  1273. /*****************************************************************************/
  1274.  
  1275. #include "whitestone.bm"
  1276. #include "blackstone.bm"
  1277. #include "whitestonemask.bm"
  1278. #include "blackstonemask.bm"
  1279. #include "gray.bm"
  1280. #include "xgosh.bm"
  1281. #include "xgosh_title.bm"
  1282.  
  1283. #include "gosh.h"
  1284.  
  1285. XtAppContext app_context;
  1286. int global_argc;
  1287. char **global_argv;
  1288.  
  1289. /*****************************************************************************/
  1290.  
  1291. #define InfoHeight 30
  1292. #define InfoWidth 30
  1293. #define InfoBuffer 30
  1294.  
  1295. #define MESS_OFF_X 30
  1296. #define MESS_OFF_Y InfoHeight + 10
  1297.  
  1298. #define TITLE_BORDER 10
  1299. #define TITLE_BUFFER 100
  1300.  
  1301. #define BlackTimerPos 6*InfoWidth
  1302. #define WhiteTimerPos 8*InfoWidth
  1303.  
  1304. #if 0   /* commented out merely because these don't seem to be found on vms */
  1305. #define CoolFont "8x13"
  1306. #define BoldCoolFont "8x13bold"
  1307. #endif
  1308. #define CoolFont "fixed"
  1309. #define BoldCoolFont "fixed"
  1310.  
  1311.  
  1312. #define TITLEWINDOW 5
  1313. #define INFOWINDOW 4
  1314. #define BOARDWINDOW 2
  1315. #define MAINWINDOW 1 
  1316. #define ROOTWINDOW 0
  1317.  
  1318. #define TITLEMODE 0
  1319. #define PLAYMODE 1
  1320. #define HANDICAPMODE 2
  1321. #define KILLMODE 3
  1322. #define ENDMODE 4
  1323.  
  1324. /*****************************************************************************/
  1325.  
  1326. struct PLAYER {
  1327.   Display *display;
  1328.   Window window[10];
  1329.   GC gc[10];
  1330.   XSizeHints hint[10];
  1331.   int screen;
  1332.   XFontStruct *font_struct;
  1333.   XFontStruct *bold_font_struct;
  1334.   unsigned long foreground, background, boardcolor;
  1335.   Pixmap MouseStone, MouseStoneMask, IconPixmap, GreyPixmap, TitlePixmap;
  1336.   Cursor StoneCursor;
  1337.   int dx,dy,ox,oy;
  1338.   int color;
  1339.   int Mode;
  1340. };
  1341.  
  1342. /*****************************************************************************/
  1343.  
  1344. /*****************************************************************************
  1345.  * DrawStone(display, window, gc, foreground, bg, x, y, dx, dy, type)
  1346.  *  - Draws a stone of color type at x,y of size dx,dy in window of display
  1347.  *    and of foreground and bg.
  1348.  ****************************************************************************/
  1349.  
  1350. DrawStone(display, window, gc, fg, bg, x, y, dx, dy, type)
  1351.      Display *display;
  1352.      Window window;
  1353.      GC gc;
  1354.      unsigned long fg, bg;
  1355.      int x, y, dx,dy;
  1356.      int type;
  1357. {
  1358.   if(type==WHITE) {
  1359.     XSetForeground(display, gc, bg);
  1360.     XFillArc(display, window, gc, x-dx/2, y-dy/2, dx, dy, 0, 360*64);
  1361.     XSetForeground(display, gc, fg);
  1362.     XDrawArc(display, window, gc, x-dx/2, y-dy/2, dx, dy, 0, 360*64);
  1363.     /* Draw the glint */
  1364.     XDrawArc(display, window, gc, x-((dx*2)/6), y-((dy*2)/6), (dx*2)/3, (dy*2)/3, -15*64, -60*64);
  1365.   } else if(type==BLACK) {
  1366.     XSetForeground(display, gc, fg);
  1367.     XFillArc(display, window, gc, x-dx/2, y-dy/2 , dx, dy, 0, 360*64);
  1368.     XDrawArc(display, window, gc, x-dx/2, y-dy/2 , dx, dy, 0, 360*64);
  1369.     XSetForeground(display, gc, bg);
  1370.     /* Draw the glint */
  1371.     XDrawArc(display, window, gc, x-((dx*2)/6), y-((dy*2)/6), (dx*2)/3, (dy*2)/3, -15*64, -60*64);
  1372.   } 
  1373. /*else if(type==EMPTY) {
  1374.     XSetForeground(display, gc, bg);
  1375.     XFillArc(display, window, gc, x-dx/2, y-dy/2, dx, dy, 0, 360*64);
  1376.     XDrawArc(display, window, gc, x-dx/2, y-dy/2, dx, dy, 0, 360*64);
  1377.     XSetForeground(display, gc, fg);
  1378.     XDrawLine(display, window, gc, x, y-dy/2, x, y+dy/2);
  1379.     XDrawLine(display, window, gc, x-dx/2, y, x+dx/2, y);
  1380.   }*/
  1381. }
  1382.  
  1383. /*****************************************************************************
  1384.  * DrawCross(display, window, gc, fg, bg, x, y, dx, dy, type)
  1385.  *  - Draws a cross to mark the last move at x,y. 
  1386.  ****************************************************************************/
  1387.  
  1388. DrawCross(display, window, gc, fg, bg, x, y, dx, dy, type)
  1389.      Display *display;
  1390.      Window window;
  1391.      GC gc;
  1392.      unsigned long fg, bg;
  1393.      int x, y, dx,dy;
  1394.      int type;
  1395. {
  1396.   int ddx, ddy;
  1397.   ddx = dx / 6;
  1398.   ddy = dy / 6;
  1399.  
  1400.   if(type==BLACK)
  1401.     XSetForeground(display, gc, bg);
  1402.   else
  1403.     XSetForeground(display, gc, fg);
  1404.  
  1405.   XDrawLine(display, window, gc, x - ddx, y - ddy, x + ddx, y + ddy);
  1406.   XDrawLine(display, window, gc, x - ddx, y + ddy, x + ddx, y - ddy);
  1407. }
  1408.  
  1409. /*****************************************************************************
  1410.  * DrawPoint(display, window, gc, fg, bg, x, y, dx, dy)
  1411.  *  - Draws a small point at x,y.
  1412.  ****************************************************************************/
  1413.  
  1414. DrawPoint(display, window, gc, x, y, dx, dy)
  1415.      Display *display;
  1416.      Window window;
  1417.      GC gc;
  1418.      int x, y, dx,dy;
  1419. {
  1420.   XFillArc(display, window, gc, x-dx/8, y-dy/8, dx/4, dy/4, 0, 360*64);
  1421.   XDrawArc(display, window, gc, x-dx/8, y-dy/8, dx/4, dy/4, 0, 360*64);
  1422. }
  1423.  
  1424. /*****************************************************************************/
  1425.  
  1426. int GridToScrn(x, sx, dx)
  1427.      int x, sx, dx;
  1428. {
  1429.   return(sx + dx * x);
  1430. }
  1431.  
  1432. int ScrnToGrid(x, sx, dx)
  1433.      int x, sx, dx;
  1434. {
  1435.   return((x - sx) / dx);
  1436. }
  1437.  
  1438. /*****************************************************************************
  1439.  * FigureMouseClick(mx, my, sizex, sizey, dx, dy, sx, sy, x, y)
  1440.  *  - returns in x,y the coordinates on the game board of the
  1441.  *    mx,my position.
  1442.  *    returns TRUE if successful.
  1443.  *    returns FALSE otherwise.
  1444.  ****************************************************************************/
  1445.  
  1446. int FigureMouseClick(board, mx, my, dx, dy, sx, sy, x, y)
  1447.      Board *board;
  1448.      int mx, my;
  1449.      int dx, dy, sx, sy;
  1450.      int *x,*y;
  1451. {
  1452.   *x = ScrnToGrid(mx+dx/2, sx, dx);
  1453.   *y = ScrnToGrid(my+dy/2, sy, dy);
  1454.  
  1455.   return(IsInBoard(board, *x, *y));
  1456. }
  1457.  
  1458. DrawStoneOnBoard(display, window, gc, fg, bg, x, y, dx, dy, sx, sy, type)
  1459.      Display *display;
  1460.      Window window;
  1461.      GC gc;
  1462.      unsigned long fg, bg;
  1463.      int x, y, dx,dy;
  1464.      int sx,sy;
  1465.      int type;
  1466. {
  1467.   DrawStone(display, window, gc, fg, bg, GridToScrn(x, sx, dx), GridToScrn(y, sy, dy), dx, dy, type);
  1468. }
  1469.  
  1470. DrawAllPieces(display, window, gc, fg, bg, board, dx, dy, sx, sy)
  1471.      Display *display;
  1472.      Window window;
  1473.      GC gc;
  1474.      unsigned long fg, bg;
  1475.      Board *board;
  1476.      int dx,dy,sx,sy;
  1477. {
  1478.   int i,j;
  1479.   DEBUG("DrawAllPieces", IN);
  1480.   for(i=0; i<board->sizex; i++)
  1481.     for(j=0; j<board->sizey; j++)
  1482.       DrawStoneOnBoard(display, window, gc, fg, bg, i, j, dx, dy, sx, sy, GetStone(board, i, j));
  1483.   DEBUG("DrawAllPieces", OUT);
  1484. }     
  1485.  
  1486. /*****************************************************************************/
  1487.  
  1488. GetMeasures(board, width, height, dx, dy, ox, oy)
  1489.      Board *board;
  1490.      int width, height;
  1491.      int *dx, *dy;
  1492.      int *ox, *oy;
  1493. {
  1494.   int awidth, aheight;
  1495.  
  1496.   *dx = width / board->sizex;
  1497.   *dy = height / board->sizey;
  1498.   
  1499.   awidth = *dx * board->sizex;
  1500.   aheight = *dy * board->sizey;
  1501.  
  1502.   *ox = (width - awidth + *dx) / 2;
  1503.   *oy = (height - aheight + *dy) / 2;
  1504. }
  1505.  
  1506. /*****************************************************************************/
  1507.  
  1508. DrawBoard(display, window, gc, fg, bg, board, dx, dy, ox, oy)
  1509.      Display *display;
  1510.      Window window;
  1511.      GC gc;
  1512.      unsigned long fg, bg;
  1513.      Board *board;
  1514.      int dx, dy, ox, oy;
  1515. {
  1516.   int i,j;
  1517.   XSegment segments[MAXY+MAXX];
  1518.  
  1519.   DEBUG("DrawBoard", IN);
  1520.  
  1521.   if(board->sizey==1) {
  1522.     for(i=0; i<board->sizex; i++) {
  1523.       segments[i].x1 = ox + i * dx;
  1524.       segments[i].y1 = oy - dy/2;
  1525.       segments[i].x2 = ox + i * dx;
  1526.       segments[i].y2 = oy + (board->sizey-1) * dy + dy/2;
  1527.     }
  1528.     XDrawSegments(display, window, gc, segments, board->sizex);
  1529.   } else {
  1530.     for(i=0; i<board->sizey; i++) {
  1531.       segments[i].x1 = ox;
  1532.       segments[i].y1 = oy + i * dy;
  1533.       segments[i].x2 = ox + (board->sizex - 1) * dx;
  1534.       segments[i].y2 = oy + i * dy;
  1535.     }
  1536.     XDrawSegments(display, window, gc, segments, board->sizey);
  1537.   }
  1538.  
  1539.   if(board->sizex==1) {
  1540.     for(i=0; i<board->sizey; i++) {
  1541.       segments[i].x1 = ox - dx/2;
  1542.       segments[i].y1 = oy + i * dy;
  1543.       segments[i].x2 = ox + (board->sizex - 1) * dx + dx/2;
  1544.       segments[i].y2 = oy + i * dy;
  1545.     }
  1546.     XDrawSegments(display, window, gc, segments, board->sizey);
  1547.   } else {
  1548.     for(i=0; i<board->sizex; i++) {
  1549.       segments[i].x1 = ox + i * dx;
  1550.       segments[i].y1 = oy;
  1551.       segments[i].x2 = ox + i * dx;
  1552.       segments[i].y2 = oy + (board->sizey - 1) * dy;
  1553.     }
  1554.     XDrawSegments(display, window, gc, segments, board->sizex);
  1555.   }
  1556.  
  1557.  
  1558.   XDrawRectangle(display, window, gc, ox-2, oy-2, dx*(board->sizex-1)+4, dy*(board->sizey-1)+4);
  1559.  
  1560.   if(board->sizex == 19 && board->sizey == 19) {
  1561.     for(i=3; i<=15; i+=6)
  1562.       for(j=3; j<=15; j+=6)
  1563.     DrawPoint(display, window, gc, GridToScrn(i, ox, dx), GridToScrn(j, oy, dy), dx, dy);
  1564.   }
  1565.  
  1566.   DEBUG("DrawBoard", OUT);
  1567. }
  1568.  
  1569. DrawTimer(display, window, gc, fg, bg, x, y, dx, dy)
  1570.      Display *display;
  1571.      Window window;
  1572.      GC gc;
  1573.      unsigned long fg, bg;
  1574.      int x,y;
  1575.      int dx,dy;
  1576. {
  1577.   XSetForeground(display, gc, bg);
  1578.   XFillArc(display, window, gc, x-dx/2, y-dy/2, dx, dy, 0, 360*64);
  1579.   XSetForeground(display, gc, fg);
  1580.   XDrawArc(display, window, gc, x-dx/2, y-dy/2, dx, dy, 0, 360*64);
  1581.   
  1582. }
  1583.  
  1584. UpdateTimer(display, window, gc, x, y, dx, dy, time)
  1585.      Display *display;
  1586.      Window window;
  1587.      GC gc;
  1588.      int x,y;
  1589.      int dx,dy;
  1590.      time_t time;
  1591. {
  1592.   int min, sec;
  1593.   double angle;
  1594.   int x2,y2;
  1595.   min = time / 60;
  1596.   sec = time - (min * 60);
  1597.  
  1598.   angle = min / 60.0 * 2.0 * 3.14159 - 3.14159/2.0;
  1599.   x2 = 0.50 * (dx/2.0) * cos(angle);
  1600.   y2 = 0.50 * (dy/2.0) * sin(angle);
  1601.   XDrawLine(display, window, gc, x, y, x+x2, y+y2);
  1602.  
  1603.   angle = sec / 60.0 * 2.0 * 3.14159 - 3.14159/2.0;
  1604.   x2 = 0.80 * (dx/2.0) * cos(angle);
  1605.   y2 = 0.80 * (dy/2.0) * sin(angle);
  1606.   XDrawLine(display, window, gc, x, y, x+x2, y+y2);
  1607. }
  1608.  
  1609. DrawTurnMarkers(display, window, gc, fg, bg, dx, dy, turn)
  1610.      Display *display;
  1611.      Window window;
  1612.      GC gc;
  1613.      unsigned long fg, bg;
  1614.      int dx,dy;
  1615.      int turn;
  1616. {
  1617.   DrawStone(display, window, gc, fg, bg, dx+dx/2, 2+dy/2, dx, dy, WHITE);
  1618.   DrawStone(display, window, gc, fg, bg, 3*dx+dx/2, 2+dy/2, dx, dy, BLACK);
  1619.   if(turn == WHITE) {
  1620.     XSetForeground(display, gc, bg);
  1621.     XDrawRectangle(display, window, gc, dx*3-1, 1, dx+2, dy+2);
  1622.     XSetForeground(display, gc, fg);
  1623.     XDrawRectangle(display, window, gc, dx-1, 1, dx+2, dy+2);
  1624.   } else if(turn==BLACK) {
  1625.     XSetForeground(display, gc, bg);
  1626.     XDrawRectangle(display, window, gc, dx-1, 1, dx+2, dy+2);
  1627.     XSetForeground(display, gc, fg);
  1628.     XDrawRectangle(display, window, gc, dx*3-1, 1, dx+2, dy+2);
  1629.   }
  1630. }
  1631.  
  1632. XCenterString(display, window, gc, width, height, string, font_struct)
  1633.      Display *display;
  1634.      Window window;
  1635.      GC gc;
  1636.      int width, height;
  1637.      char *string;
  1638.      XFontStruct *font_struct;
  1639. {
  1640.   XCharStruct overall;
  1641.   int ascent, descent, dir;
  1642.   int a_width;
  1643.   int x,y;
  1644.  
  1645.   a_width = XTextWidth(font_struct, string, strlen(string));
  1646.   XTextExtents(font_struct, string, strlen(string), &dir, &ascent, &descent, &overall);
  1647.   x = (width - a_width) / 2;
  1648.   y = (height + ascent) / 2 ;
  1649.   
  1650.   XDrawImageString(display, window, gc, x, y, string, strlen(string));
  1651. }
  1652.  
  1653. XGetHeightWindow(display, window, width, height)
  1654.      Display *display;
  1655.      Window window;
  1656.      unsigned int *width, *height;
  1657. {
  1658.   Window root;
  1659.   int x,y;
  1660.   int bw, depth;
  1661.  
  1662.   return(XGetGeometry (display, window, &root, &x, &y, width, height, &bw, &depth));
  1663. }
  1664.  
  1665. DrawInfoText(display, window, gc, x, y, string, font_struct)
  1666.      Display *display;
  1667.      Window window;
  1668.      GC gc;
  1669.      int x,y;
  1670.      char *string;
  1671.      XFontStruct *font_struct;
  1672. {
  1673.   XCharStruct overall;
  1674.   int ascent, descent, dir;
  1675.   int a_width;
  1676.   unsigned width, height;
  1677.  
  1678.   a_width = XTextWidth(font_struct, string, strlen(string));
  1679.   XTextExtents(font_struct, string, strlen(string), &dir, &ascent, &descent, &overall);
  1680.  
  1681.   XGetHeightWindow(display, window, &width, &height);
  1682.   XClearArea(display, window, x, y, width, ascent+descent, FALSE);
  1683.  
  1684.   y = (y + ascent);
  1685.  
  1686.   XDrawImageString(display, window, gc, x, y, string, strlen(string));
  1687.  
  1688.   return(ascent+descent);
  1689. }
  1690.  
  1691.  
  1692.  
  1693. /*****************************************************************************/
  1694.  
  1695. /*****************************************************************************
  1696.  * LookUpColor(display, name, xcolor, color)
  1697.  *  - returns the color name in xcolor and the index of xcolor in color. 
  1698.  ****************************************************************************/
  1699.  
  1700. int LookUpColor(display, name, xcolor, color)
  1701.      Display *display;
  1702.      char *name;
  1703.      XColor *xcolor;
  1704.      unsigned long *color;
  1705. {
  1706.   XColor colour;
  1707.   if(XAllocNamedColor(display, DefaultColormap(display, DefaultScreen(display)), name, 
  1708.               &colour, xcolor) == 0) {
  1709. /*    printf("LookUpColor: could not allocate %s.\n", name);*/
  1710.     return(FALSE);
  1711.   } 
  1712.   *color = xcolor->pixel;
  1713.   return(TRUE);
  1714. }
  1715.  
  1716. /*****************************************************************************
  1717.  * OpenDisplay(ply, displaystring, geostring)
  1718.  *  - Sets up everything in order to start using windows in X. 
  1719.  ****************************************************************************/
  1720.  
  1721. OpenDisplay(ply, displaystring, geostring, boardcolor, sizex, sizey)
  1722.      struct PLAYER *ply;
  1723.      char *displaystring;
  1724.      char *geostring;
  1725.      char *boardcolor;
  1726.      int sizex, sizey;
  1727. {
  1728.   Display *dpy;
  1729.   XWMHints WMHints;
  1730.   XColor fg, bg, color;
  1731.   char title[81];
  1732.   
  1733.   DEBUG("OpenDisplay", IN);
  1734.  
  1735.   /* initialization */
  1736.   if(!(ply->display = XtOpenDisplay(app_context, displaystring, "xgosh",
  1737.     "xgosh", 0, 0, &global_argc, global_argv))) {
  1738.     printf("OpenDisplay: can not open display (%s).\n", displaystring);
  1739.     exit(0);
  1740.   }
  1741.   dpy = ply->display;
  1742.   ply->screen = DefaultScreen(dpy);
  1743.   ply->window[ROOTWINDOW] = DefaultRootWindow(dpy);
  1744.  
  1745.   /* default pixel values */
  1746.   if(LookUpColor(dpy, "White", &bg, &(ply->background))==FALSE) 
  1747.     ply->background = WhitePixel( dpy, ply->screen);
  1748.   if(LookUpColor(dpy, "Black", &fg, &(ply->foreground))==FALSE) 
  1749.     ply->foreground = BlackPixel( dpy, ply->screen);
  1750.  
  1751.   ply->boardcolor = WhitePixel( dpy, ply->screen);
  1752.   if(boardcolor != 0L)
  1753.     LookUpColor(dpy, boardcolor, &color, &(ply->boardcolor));
  1754.   else
  1755.     LookUpColor(dpy, "Tan1", &color, &(ply->boardcolor));
  1756.  
  1757.   ply->hint[BOARDWINDOW].x = 200;
  1758.   ply->hint[BOARDWINDOW].y = 300;
  1759.   ply->hint[BOARDWINDOW].width = (400 / MAX(sizex, sizey)) * sizex;
  1760.   ply->hint[BOARDWINDOW].height = (400 / MAX(sizex, sizey)) * sizey;
  1761.  
  1762.   ply->hint[INFOWINDOW].x = 200;
  1763.   ply->hint[INFOWINDOW].y = 200;
  1764.   ply->hint[INFOWINDOW].width = 400;
  1765.   ply->hint[INFOWINDOW].height = 70;
  1766.  
  1767.   ply->hint[TITLEWINDOW].x = 200;
  1768.   ply->hint[TITLEWINDOW].y = 200;
  1769.   ply->hint[TITLEWINDOW].width = noname_width + 2*TITLE_BORDER;
  1770.   ply->hint[TITLEWINDOW].height = noname_height + 2*TITLE_BORDER + TITLE_BUFFER;
  1771.  
  1772.   if(geostring != 0L) 
  1773.     XParseGeometry(geostring, &ply->hint[BOARDWINDOW].x, &ply->hint[BOARDWINDOW].y, 
  1774.            (unsigned int *) &ply->hint[BOARDWINDOW].width, 
  1775.            (unsigned int *) &ply->hint[BOARDWINDOW].height);
  1776.  
  1777.   ply->hint[BOARDWINDOW].flags = PPosition | PSize | PAspect | PMinSize;
  1778.   ply->hint[BOARDWINDOW].min_aspect.x = sizex;
  1779.   ply->hint[BOARDWINDOW].min_aspect.y = sizey;
  1780.   ply->hint[BOARDWINDOW].max_aspect.x = sizex;
  1781.   ply->hint[BOARDWINDOW].max_aspect.y = sizey;
  1782.   ply->hint[BOARDWINDOW].min_width = 70;
  1783.   ply->hint[BOARDWINDOW].min_height = 70;
  1784.  
  1785.   ply->window[BOARDWINDOW] = 
  1786.     XCreateSimpleWindow(dpy, ply->window[ROOTWINDOW], ply->hint[BOARDWINDOW].x, 
  1787.             ply->hint[BOARDWINDOW].y,
  1788.             ply->hint[BOARDWINDOW].width,  ply->hint[BOARDWINDOW].height, 0,
  1789.             ply->foreground, ply->background);
  1790.  
  1791.   ply->window[INFOWINDOW] = 
  1792.     XCreateSimpleWindow(dpy, ply->window[ROOTWINDOW], ply->hint[INFOWINDOW].x, 
  1793.             ply->hint[INFOWINDOW].y,
  1794.             ply->hint[INFOWINDOW].width,  ply->hint[INFOWINDOW].height, 1,
  1795.             ply->foreground, ply->background);
  1796.  
  1797.   ply->window[TITLEWINDOW] = 
  1798.     XCreateSimpleWindow(dpy, ply->window[ROOTWINDOW], ply->hint[TITLEWINDOW].x, 
  1799.             ply->hint[TITLEWINDOW].y,
  1800.             ply->hint[TITLEWINDOW].width,  ply->hint[TITLEWINDOW].height, 1,
  1801.             ply->foreground, ply->background);
  1802.  
  1803.   if(ply->color == WHITE)
  1804.     strcpy(title, "xgosh: Player White");
  1805.   else
  1806.     strcpy(title, "xgosh: Player Black");
  1807.     
  1808.   XSetStandardProperties(dpy,  ply->window[BOARDWINDOW], title, title, None, 
  1809.              0L,  0, &ply->hint[BOARDWINDOW]);
  1810.   XSetStandardProperties(dpy,  ply->window[INFOWINDOW], title, title, None, 
  1811.              0L,  0, &ply->hint[INFOWINDOW]);
  1812.   XSetStandardProperties(dpy,  ply->window[TITLEWINDOW], title, title, None, 
  1813.              0L,  0, &ply->hint[TITLEWINDOW]);
  1814.  
  1815.   /* Set up the icon bitmap */
  1816.  
  1817.   ply->IconPixmap = XCreateBitmapFromData(dpy, ply->window[BOARDWINDOW], xgosh_bits, 
  1818.                       xgosh_width, xgosh_height);
  1819.   
  1820.   /* tell the Window Manager about the icon */
  1821.   WMHints.icon_pixmap = ply->IconPixmap;
  1822.   WMHints.initial_state = NormalState;
  1823.   WMHints.input = True;                            /* thanks to Ken Blake */
  1824.   WMHints.flags = IconPixmapHint | StateHint | InputHint;
  1825.   
  1826.   XSetWMHints(dpy, ply->window[TITLEWINDOW], &WMHints);
  1827.   XSetWMHints(dpy, ply->window[INFOWINDOW], &WMHints);
  1828.   XSetWMHints(dpy, ply->window[BOARDWINDOW], &WMHints);
  1829.  
  1830.   /* input event selection */
  1831.   XSelectInput( dpy,  ply->window[TITLEWINDOW], StructureNotifyMask | KeyPressMask | 
  1832.            ButtonPressMask | ExposureMask );
  1833.   XSelectInput( dpy,  ply->window[BOARDWINDOW], StructureNotifyMask | KeyPressMask | 
  1834.            ButtonPressMask | ExposureMask );
  1835.   XSelectInput( dpy,  ply->window[INFOWINDOW], StructureNotifyMask |
  1836.            ButtonPressMask | ExposureMask);
  1837.  
  1838.   /* windowmn mapping */
  1839.   XMapWindow(dpy, ply->window[TITLEWINDOW]);
  1840.  
  1841.   ply->gc[BOARDWINDOW] = XCreateGC(dpy, ply->window[BOARDWINDOW],0,0);
  1842.   XSetBackground(dpy, ply->gc[BOARDWINDOW], ply->background);
  1843.   XSetForeground(dpy, ply->gc[BOARDWINDOW], ply->foreground);
  1844.  
  1845.   ply->gc[TITLEWINDOW] = XCreateGC(dpy, ply->window[TITLEWINDOW],0,0);
  1846.   XSetBackground(dpy, ply->gc[TITLEWINDOW], ply->background);
  1847.   XSetForeground(dpy, ply->gc[TITLEWINDOW], ply->foreground);
  1848.   ply->TitlePixmap = XCreateBitmapFromData(dpy, ply->window[TITLEWINDOW], noname_bits, 
  1849.                          noname_width, noname_height);
  1850.   ply->gc[INFOWINDOW] = XCreateGC(dpy, ply->window[INFOWINDOW],0,0);
  1851.   XSetBackground(dpy, ply->gc[INFOWINDOW], ply->background);
  1852.   XSetForeground(dpy, ply->gc[INFOWINDOW], ply->foreground);
  1853.  
  1854.   /* get a nice cool font for display. */
  1855.   if((ply->font_struct = XLoadQueryFont(ply->display, CoolFont)) != NULL) {
  1856.     XSetFont(ply->display, ply->gc[INFOWINDOW], ply->font_struct->fid);
  1857.     XSetFont(ply->display, ply->gc[TITLEWINDOW], ply->font_struct->fid);
  1858.   }
  1859.   else
  1860.     {
  1861.     printf ("Xgosh failed to XLoadQueryFont \"%s\"\n", CoolFont);
  1862.     exit (EXIT_FAILURE);
  1863.     }
  1864.   if
  1865.   ((ply->bold_font_struct = XLoadQueryFont(ply->display, BoldCoolFont)) != NULL)
  1866.     {}
  1867.   else
  1868.     {
  1869.     printf ("Xgosh failed to XLoadQueryFont \"%s\"\n", BoldCoolFont);
  1870.     exit (EXIT_FAILURE);
  1871.     }
  1872.   ply->gc[3] = XCreateGC(dpy, ply->window[BOARDWINDOW],0,0);
  1873.   XSetBackground(dpy, ply->gc[3], ply->background);
  1874.   XSetForeground(dpy, ply->gc[3], ply->foreground);
  1875.   ply->GreyPixmap = XCreateBitmapFromData(dpy, ply->window[BOARDWINDOW], gray_bits, 
  1876.                       gray_width, gray_height);
  1877.   XSetStipple(dpy, ply->gc[3], ply->GreyPixmap);
  1878.   XSetFillStyle(dpy, ply->gc[3], FillOpaqueStippled);
  1879.  
  1880.   if(ply->color == WHITE) {
  1881.     ply->MouseStone = 
  1882.       XCreatePixmapFromBitmapData(dpy, ply->window[BOARDWINDOW], whitestone_bits, 
  1883.                   whitestone_width, whitestone_height, ply->foreground, 
  1884.                   ply->background, 1);
  1885.     ply->MouseStoneMask =  
  1886.       XCreatePixmapFromBitmapData(dpy, ply->window[BOARDWINDOW], whitestonemask_bits,
  1887.                   whitestonemask_width, whitestonemask_height, 
  1888.                   ply->foreground, ply->background, 1);
  1889.     ply->StoneCursor = 
  1890.       XCreatePixmapCursor(dpy, ply->MouseStone, ply->MouseStoneMask, &fg, &bg, 
  1891.               whitestone_x_hot, whitestone_y_hot);
  1892.   } else {
  1893.     ply->MouseStone = 
  1894.       XCreatePixmapFromBitmapData(dpy, ply->window[BOARDWINDOW], blackstone_bits, 
  1895.                   blackstone_width, blackstone_height, ply->foreground, 
  1896.                   ply->background, 1);
  1897.     ply->MouseStoneMask =  
  1898.       XCreatePixmapFromBitmapData(dpy, ply->window[BOARDWINDOW], blackstonemask_bits, 
  1899.                   blackstonemask_width, blackstonemask_height, 
  1900.                   ply->foreground, ply->background, 1);
  1901.     ply->StoneCursor = 
  1902.       XCreatePixmapCursor(dpy, ply->MouseStone, ply->MouseStoneMask, &fg, &bg, 
  1903.               blackstone_x_hot, blackstone_y_hot);
  1904.   }
  1905.   XDefineCursor(dpy, ply->window[TITLEWINDOW], ply->StoneCursor);
  1906.   XDefineCursor(dpy, ply->window[INFOWINDOW], ply->StoneCursor);
  1907.   XDefineCursor(dpy, ply->window[BOARDWINDOW], ply->StoneCursor);
  1908.  
  1909.   DEBUG("OpenDisplay", OUT);
  1910. }
  1911.  
  1912. /*****************************************************************************/
  1913.  
  1914. usage(s)
  1915.      char *s;
  1916. {
  1917.   printf("usage:  %s [-options ...]\n\n", s); 
  1918.   printf("where options include:\n");
  1919.   printf("        -whitedisplay dpy         X server on which to display white player.\n");
  1920.   printf("        -blackdisplay dpy         X server on which to display black player.\n");
  1921.   printf("        -whitegeometry WxH+X+Y    size and location of white player's window.\n");
  1922.   printf("        -blackgeometry WxH+X+Y    size and location of black player's window.\n");
  1923.   printf("        -handicap number          number of black handicap stones. [0]\n");
  1924.   printf("        -loadfile filename        filename to load in.\n");
  1925.   printf("        -savefile filename        filename to save under.\n");
  1926.   printf("        -blacktime time           Black's playing timer (in seconds.)\n");
  1927.   printf("        -whitetime time           White's playing timer (in seconds.)\n");
  1928.   printf("        -graystipple              A gray board color. \n");
  1929.   printf("        -boardcolor color         The color of the board. [tan1]. \n");
  1930.   printf("        -beep                     Sound a beep after opponent's move. \n");
  1931.   printf("        -singledisplay            use only one display. \n");
  1932.   printf("        -size x y                 Size of the game board. [19 19] MAX[%d %d]\n",MAXX, MAXY);
  1933.   printf("        -usage                    this description.\n\n");
  1934. }
  1935.  
  1936. int WhichPlayer(display, Players, n)
  1937.      Display *display;
  1938.      struct PLAYER Players[];
  1939.      int n;
  1940. {
  1941.   int i;
  1942.   for(i=0; i<n; i++)
  1943.     if(Players[i].display == display)
  1944.       return(i);
  1945.     
  1946.   return(-1);
  1947. }
  1948.  
  1949.  
  1950. FullRedraw(Player, ndisplays, type)
  1951.      struct PLAYER Player[];
  1952.      int type; /* type of redraw */
  1953. {
  1954.   XExposeEvent xexpose;
  1955.  
  1956.   xexpose.type = Expose;
  1957.   xexpose.x = xexpose.y = xexpose.width = xexpose.height = 0;
  1958.   xexpose.count = 0;
  1959.   FORI(ndisplays, xexpose.display = Player[I].display;
  1960.        if(type == MAINWINDOW || type == BOARDWINDOW) {
  1961.      xexpose.window = Player[I].window[BOARDWINDOW];
  1962.      XSendEvent(Player[I].display, Player[I].window[BOARDWINDOW], FALSE, 
  1963.             ExposureMask, (XEvent *)&xexpose);
  1964.        }
  1965.        if(type == MAINWINDOW || type == INFOWINDOW) {
  1966.      xexpose.window = Player[I].window[INFOWINDOW];
  1967.      XSendEvent(Player[I].display, Player[I].window[INFOWINDOW], FALSE, 
  1968.             ExposureMask, (XEvent *)&xexpose); 
  1969.        }
  1970.        );
  1971. }
  1972.  
  1973.   int Turn;
  1974.   time_t starttimer,endtimer;
  1975.   time_t timers[2];
  1976.   int ndisplays; /* the number of working displays to display to. */
  1977.   int lastmovecolor;
  1978.   MoveTree *lastmove;
  1979.   struct PLAYER Player[2];
  1980.   int Mode; /* mode of operation. */
  1981.  
  1982. /*****************************************************************************/
  1983. /*****************************************************************************/
  1984. /*****************************************************************************/
  1985.  
  1986. timeout_handler ()
  1987. {
  1988.       if(Mode == PLAYMODE) {
  1989.     if(lastmove != NULL) {
  1990.       FORI(ndisplays, DrawCross(Player[I].display, Player[I].window[BOARDWINDOW], 
  1991.                     Player[I].gc[2], 
  1992.                     Player[I].foreground, Player[I].background, 
  1993.                     GridToScrn(lastmove->x, Player[I].ox, Player[I].dx),
  1994.                     GridToScrn(lastmove->y, Player[I].oy, Player[I].dy),
  1995.                     Player[I].dx, Player[I].dy, lastmovecolor); );
  1996.       lastmovecolor = other(lastmovecolor);
  1997.     }
  1998.  
  1999.     time(&endtimer);
  2000.     if((endtimer - starttimer) > 0) {
  2001.       FORI(ndisplays, 
  2002.            XSetForeground(Player[I].display, Player[I].gc[INFOWINDOW], Player[I].background);
  2003.            if(Turn == WHITE)
  2004.            UpdateTimer(Player[I].display, Player[I].window[INFOWINDOW], Player[I].gc[INFOWINDOW],
  2005.                  BlackTimerPos, InfoHeight/2, InfoWidth, InfoHeight, timers[WHITE]);
  2006.            else
  2007.            UpdateTimer(Player[I].display, Player[I].window[INFOWINDOW], Player[I].gc[INFOWINDOW],
  2008.                WhiteTimerPos, InfoHeight/2, InfoWidth, InfoHeight, timers[BLACK]);
  2009.            );
  2010.       timers[Turn] -= endtimer - starttimer;
  2011.       time(&starttimer);
  2012.       FORI(ndisplays, 
  2013.            XSetForeground(Player[I].display, Player[I].gc[INFOWINDOW], Player[I].foreground);
  2014.            if(Turn == WHITE)
  2015.            UpdateTimer(Player[I].display, Player[I].window[INFOWINDOW], Player[I].gc[INFOWINDOW],
  2016.                BlackTimerPos, InfoHeight/2, InfoWidth, InfoHeight, timers[WHITE]);
  2017.            else
  2018.            UpdateTimer(Player[I].display, Player[I].window[INFOWINDOW], Player[I].gc[INFOWINDOW],
  2019.                WhiteTimerPos, InfoHeight/2, InfoWidth, InfoHeight, timers[BLACK]);
  2020.            );
  2021.     }
  2022.       }
  2023.     XtAppAddTimeOut (app_context, 300, timeout_handler, 0);
  2024. }
  2025.  
  2026. main(argc, argv)
  2027.      int argc;
  2028.      char **argv;
  2029. {
  2030.   int i;
  2031.   char *whitegeometry, *blackgeometry;
  2032.   char *whitedisplay, *blackdisplay;
  2033.   char *boardcolor;
  2034.   Board board;
  2035.   int handicap;
  2036.   int ply;
  2037.   int x,y, offset;
  2038.   int greystipple;
  2039.   char text[255];
  2040.   KeySym key;
  2041.   int cbs, cws;
  2042.  
  2043.   XEvent event;
  2044.   XtInputMask whats_ready;
  2045. /*
  2046.   fd_set mask, readfds, wrfds, exfds;
  2047.   struct timeval timeout;
  2048. */
  2049.   int nfds;
  2050.   int nfound;
  2051.   int done;
  2052.   int dpc; /* connection file pointer. */
  2053.   int beep;
  2054.   char savefile[81];
  2055.   char loadfile[81];
  2056.   int whitepoints, blackpoints, undet;
  2057.  
  2058.   XExposeEvent xexpose;
  2059.   DEBUG("main", IN);
  2060.  
  2061.   global_argc = argc;
  2062.   global_argv = argv;
  2063.  
  2064.   XtToolkitInitialize();
  2065.   app_context = XtCreateApplicationContext();
  2066.  
  2067.   timers[WHITE] = 1800;
  2068.   timers[BLACK] = 1800;
  2069.   greystipple = FALSE;
  2070.   beep = FALSE;
  2071.   whitedisplay = 0L;
  2072.   blackdisplay = 0L;
  2073.   whitegeometry = 0L;
  2074.   blackgeometry = 0L;
  2075.   handicap = 0;
  2076.   lastmove = NULL;
  2077.   ndisplays = 2;
  2078.   strcpy(loadfile,"");
  2079.   strcpy(savefile,"");
  2080.  
  2081.   board.sizex = 19;
  2082.   board.sizey = 19;
  2083.   boardcolor = 0L;
  2084.  
  2085.   x=1;
  2086.   while(x<argc) {
  2087.     if(!strcmp(argv[x], "-whitedisplay")) {
  2088.       whitedisplay = argv[x+1];
  2089.       x+=2;
  2090.     } else if(!strcmp(argv[x], "-blackdisplay")) {
  2091.       blackdisplay = argv[x+1];
  2092.       x+=2;
  2093.     } else if(!strcmp(argv[x], "-whitegeometry")) {
  2094.       whitegeometry = argv[x+1];
  2095.       x+=2;
  2096.     } else if(!strcmp(argv[x], "-blacktime")) {
  2097.       sscanf(argv[x+1], "%ld", &timers[BLACK]);
  2098.       x+=2;
  2099.     } else if(!strcmp(argv[x], "-whitetime")) {
  2100.       sscanf(argv[x+1], "%ld", &timers[WHITE]);
  2101.       x+=2;
  2102.     } else if(!strcmp(argv[x], "-blackgeometry")) {
  2103.       blackgeometry = argv[x+1];
  2104.       x+=2;
  2105.     } else if(!strcmp(argv[x], "-boardcolor")) {
  2106.       boardcolor = argv[x+1];
  2107.       x+=2;
  2108.     } else if(!strcmp(argv[x], "-handicap")) {
  2109.       sscanf(argv[x+1], "%d", &handicap);
  2110.       x+=2;
  2111.     } else if(!strcmp(argv[x], "-size")) {
  2112.       sscanf(argv[x+1], "%d", &(board.sizex));
  2113.       sscanf(argv[x+2], "%d", &(board.sizey));
  2114.       if(board.sizex > MAXX || board.sizey > MAXY || (board.sizex <= 1 && board.sizey <= 1)) {
  2115.     printf("%s: illegal size of board\n", argv[0]);
  2116.     exit(1);
  2117.       }
  2118.       x+=3;
  2119.     } else if(!strcmp(argv[x], "-loadfile")) {
  2120.       strcpy(loadfile, argv[x+1]);
  2121.       x+=2;
  2122.     } else if(!strcmp(argv[x], "-savefile")) {
  2123.       strcpy(savefile, argv[x+1]);
  2124.       x+=2;
  2125.     } else if(!strcmp(argv[x], "-usage")) {
  2126.       usage(argv[0]);
  2127.       x++;
  2128.       exit(0);
  2129.     } else if(!strcmp(argv[x], "-graystipple")) {
  2130.       greystipple = TRUE;
  2131.       x++;
  2132.     } else if(!strcmp(argv[x], "-singledisplay")) {
  2133.       ndisplays = 1;
  2134.       x++;
  2135.     } else if(!strcmp(argv[x], "-beep")) {
  2136.       beep = TRUE;
  2137.       x++;
  2138.     } else {
  2139.       printf("%s: Error in arguments!\n", argv[0]);
  2140.       usage(argv[0]);
  2141.       exit(0);
  2142.     }
  2143.   }
  2144.  
  2145.   board.handicap = handicap;
  2146.   InitPlayBoard(&board);
  2147.  
  2148.   board.movetree = InitMoveTree();
  2149.  
  2150.   if(board.handicap>0)
  2151.     Turn = WHITE;
  2152.   else
  2153.     Turn = BLACK;
  2154.  
  2155.   if(strcmp(loadfile,"")) {
  2156.     lastmove = LoadMoves(&board, loadfile);
  2157.     Turn = other(board.movetree->next->color);
  2158.   } else
  2159.     strcpy(loadfile,"go.save");
  2160.  
  2161.   if(strcmp(savefile,"")==0)
  2162.     strcpy(savefile,"go.save");
  2163.  
  2164.   Player[WHITE].color = WHITE;
  2165.   Player[BLACK].color = BLACK;
  2166.  
  2167.   if(whitedisplay==0L) {
  2168.     OpenDisplay(&Player[WHITE], "", whitegeometry, boardcolor, board.sizex, board.sizey);
  2169.     whitedisplay = XDisplayString(Player[WHITE].display);
  2170.   }
  2171.   else
  2172.     OpenDisplay(&Player[WHITE], whitedisplay, whitegeometry, boardcolor, board.sizex, board.sizey);
  2173.     
  2174.   if(ndisplays > 1) {
  2175.     if(blackdisplay==0L) {
  2176.       OpenDisplay(&Player[BLACK], "", blackgeometry, boardcolor, board.sizex, board.sizey);
  2177.       blackdisplay = XDisplayString(Player[BLACK].display);
  2178.     }
  2179.     else
  2180.       OpenDisplay(&Player[BLACK], blackdisplay, blackgeometry, boardcolor, board.sizex, board.sizey);
  2181.   }
  2182.  
  2183.   /*****************************************************************************/
  2184.  
  2185. /*
  2186.   timeout.tv_sec = 0;
  2187.   timeout.tv_usec = 300000;
  2188.   FD_ZERO(&mask);
  2189.  
  2190.   FORI(ndisplays, dpc = ConnectionNumber(Player[I].display);   
  2191.        FD_SET(dpc, &mask);  );
  2192.   nfds = getdtablesize();
  2193. */
  2194.   time(&starttimer);
  2195.  
  2196.   /*****************************************************************************/
  2197.   Mode = TITLEMODE;
  2198.   Player[WHITE].Mode = TITLEMODE;
  2199.   Player[BLACK].Mode = TITLEMODE;
  2200.  
  2201.   done = FALSE;
  2202.  
  2203.   XtAppAddTimeOut (app_context, 300, timeout_handler, 0);
  2204.  
  2205.   while(!done) {
  2206.  
  2207.     XtAppNextEvent (app_context, &event);   /* block until event */
  2208.  
  2209.     switch(event.type) {
  2210.     case Expose:
  2211.       DEBUG("Expose", IN);
  2212.  
  2213.       ply = WhichPlayer(event.xexpose.display, Player, ndisplays);
  2214.       if(event.xexpose.count == 0 && event.xexpose.window == Player[ply].window[TITLEWINDOW]) {
  2215.     XCopyPlane(Player[ply].display, Player[ply].TitlePixmap, Player[ply].window[TITLEWINDOW],
  2216.            Player[ply].gc[TITLEWINDOW],
  2217.            0, 0, noname_width, noname_height, TITLE_BORDER, TITLE_BORDER, 1);
  2218.  
  2219.     x = TITLE_BORDER;
  2220.     y = noname_height + TITLE_BORDER*2;
  2221.  
  2222.     sprintf(text, "xgosh version: %s", VERSION); 
  2223.     offset = DrawInfoText(Player[ply].display, Player[ply].window[TITLEWINDOW], 
  2224.              Player[ply].gc[TITLEWINDOW], x, y,
  2225.              text, Player[ply].font_struct);
  2226.     
  2227.     y += offset;
  2228.     if(ndisplays>1) {
  2229.       if(ply==WHITE) 
  2230.         sprintf(text, "Player: White");
  2231.       else
  2232.         sprintf(text, "Player: Black");
  2233.     } else
  2234.       sprintf(text, "Player: White and Black");
  2235.     DrawInfoText(Player[ply].display, Player[ply].window[TITLEWINDOW], 
  2236.              Player[ply].gc[TITLEWINDOW], x, y,
  2237.              text, Player[ply].font_struct);
  2238.  
  2239.     sprintf(text, "handicap: %d", board.handicap);
  2240.     DrawInfoText(Player[ply].display, Player[ply].window[TITLEWINDOW], 
  2241.              Player[ply].gc[INFOWINDOW], x, y,
  2242.              text, Player[ply].font_struct);
  2243.  
  2244.     y += offset;
  2245.     sprintf(text, "board size: %dx%d", board.sizex, board.sizey);
  2246.     DrawInfoText(Player[ply].display, Player[ply].window[TITLEWINDOW], 
  2247.              Player[ply].gc[TITLEWINDOW], x, y,
  2248.              text, Player[ply].font_struct);
  2249.  
  2250.     if(ndisplays > 1) {
  2251.       y += offset;
  2252.       sprintf(text, "WhiteDisplay: %s", whitedisplay);
  2253.       DrawInfoText(Player[ply].display, Player[ply].window[TITLEWINDOW], 
  2254.                Player[ply].gc[TITLEWINDOW], x, y,
  2255.                text, Player[ply].font_struct);
  2256.       y += offset;
  2257.       sprintf(text, "BlackDisplay: %s", blackdisplay);
  2258.       DrawInfoText(Player[ply].display, Player[ply].window[TITLEWINDOW], 
  2259.                Player[ply].gc[TITLEWINDOW], x, y,
  2260.                text, Player[ply].font_struct);
  2261.     } else {
  2262.       y += offset;
  2263.       sprintf(text, "Display: %s", whitedisplay);
  2264.       DrawInfoText(Player[ply].display, Player[ply].window[TITLEWINDOW], 
  2265.                Player[ply].gc[TITLEWINDOW], x, y,
  2266.                text, Player[ply].font_struct);
  2267.     }
  2268.     y+=offset*2;
  2269.     x+=50;
  2270.     sprintf(text, "Click on window to begin play...");
  2271.     DrawInfoText(Player[ply].display, Player[ply].window[TITLEWINDOW], 
  2272.              Player[ply].gc[TITLEWINDOW], x, y,
  2273.              text, Player[ply].font_struct);
  2274.  
  2275.     x = noname_width/2 + TITLE_BORDER*2;
  2276.     y = noname_height + TITLE_BORDER*2;
  2277.  
  2278.     y += offset;
  2279.     sprintf(text, "Whitetime: %d", timers[WHITE]); 
  2280.     DrawInfoText(Player[ply].display, Player[ply].window[TITLEWINDOW], 
  2281.              Player[ply].gc[TITLEWINDOW], x, y,
  2282.              text, Player[ply].font_struct);
  2283.     y += offset;
  2284.     sprintf(text, "Blacktime: %d", timers[BLACK]);
  2285.     DrawInfoText(Player[ply].display, Player[ply].window[TITLEWINDOW], 
  2286.              Player[ply].gc[TITLEWINDOW], x, y,
  2287.              text, Player[ply].font_struct);
  2288.     
  2289.  
  2290.     XFlush(Player[ply].display);
  2291.       }
  2292.       if(event.xexpose.count == 0 && event.xexpose.window == Player[ply].window[BOARDWINDOW]) {
  2293.     XSetForeground(Player[ply].display, Player[ply].gc[2], Player[ply].foreground);
  2294.     if(greystipple) {
  2295.       XFillRectangle(Player[ply].display, Player[ply].window[BOARDWINDOW], Player[ply].gc[3], 
  2296.              0, 0, Player[ply].hint[BOARDWINDOW].width, 
  2297.              Player[ply].hint[BOARDWINDOW].height);
  2298.     } else {
  2299.       XSetForeground(Player[ply].display, Player[ply].gc[2], Player[ply].boardcolor);
  2300.       XFillRectangle(Player[ply].display, Player[ply].window[BOARDWINDOW], Player[ply].gc[2], 
  2301.              0, 0, Player[ply].hint[BOARDWINDOW].width, 
  2302.              Player[ply].hint[BOARDWINDOW].height);
  2303.       XSetForeground(Player[ply].display, Player[ply].gc[2], Player[ply].foreground);
  2304.     }
  2305.     GetMeasures(&board, Player[ply].hint[BOARDWINDOW].width, 
  2306.             Player[ply].hint[BOARDWINDOW].height, 
  2307.             &(Player[ply].dx), &(Player[ply].dy), &(Player[ply].ox), &(Player[ply].oy));
  2308.     
  2309.     DrawBoard(Player[ply].display, Player[ply].window[BOARDWINDOW], Player[ply].gc[2], 
  2310.           Player[ply].foreground, Player[ply].background, &board, Player[ply].dx, 
  2311.           Player[ply].dy, Player[ply].ox, Player[ply].oy);    
  2312.     
  2313.     DrawAllPieces(Player[ply].display, Player[ply].window[BOARDWINDOW], Player[ply].gc[2], 
  2314.               Player[ply].foreground, Player[ply].background, &board, Player[ply].dx, 
  2315.               Player[ply].dy, Player[ply].ox, Player[ply].oy);
  2316.     
  2317.       }
  2318.       if(event.xexpose.count == 0 && event.xexpose.window == Player[ply].window[INFOWINDOW]) {
  2319.     CountCapturedStones(&board, &cbs, &cws);
  2320.     
  2321.     sprintf(text, "Captured Stones: White(%d) Black(%d)", cbs, cws);
  2322.     
  2323.     DrawTimer(Player[ply].display, Player[ply].window[INFOWINDOW], Player[ply].gc[INFOWINDOW],
  2324.           Player[ply].foreground, Player[ply].background, BlackTimerPos, 
  2325.           InfoHeight/2, InfoWidth, InfoHeight);
  2326.     DrawTimer(Player[ply].display, Player[ply].window[INFOWINDOW], Player[ply].gc[INFOWINDOW],
  2327.           Player[ply].foreground, Player[ply].background, WhiteTimerPos, InfoHeight/2, 
  2328.           InfoWidth, InfoHeight);
  2329.     
  2330.     UpdateTimer(Player[ply].display, Player[ply].window[INFOWINDOW], Player[ply].gc[INFOWINDOW],
  2331.             BlackTimerPos, InfoHeight/2, InfoWidth, InfoHeight, timers[WHITE]);
  2332.     UpdateTimer(Player[ply].display, Player[ply].window[INFOWINDOW], Player[ply].gc[INFOWINDOW],
  2333.             WhiteTimerPos, InfoHeight/2, InfoWidth, InfoHeight, timers[BLACK]);
  2334.  
  2335.     DrawInfoText(Player[ply].display, Player[ply].window[INFOWINDOW], 
  2336.              Player[ply].gc[INFOWINDOW], MESS_OFF_X, MESS_OFF_Y, 
  2337.              text, Player[ply].font_struct);
  2338.  
  2339.     DrawTurnMarkers(Player[ply].display, Player[ply].window[INFOWINDOW], Player[ply].gc[INFOWINDOW],
  2340.             Player[ply].foreground, Player[ply].background, 
  2341.             InfoWidth, InfoHeight, Turn);
  2342.     
  2343.     XFlush(Player[ply].display);
  2344.       }
  2345.       DEBUG("Expose", OUT);
  2346.       break;
  2347.       
  2348.     case ConfigureNotify:
  2349.       DEBUG("ConfigureNotify", IN);
  2350.       ply = WhichPlayer(event.xconfigure.display, Player, ndisplays);
  2351.       if(event.xconfigure.window == Player[ply].window[BOARDWINDOW]) {
  2352.     Player[ply].hint[BOARDWINDOW].x = event.xconfigure.x;
  2353.     Player[ply].hint[BOARDWINDOW].y = event.xconfigure.y;
  2354.     Player[ply].hint[BOARDWINDOW].width = event.xconfigure.width;
  2355.     Player[ply].hint[BOARDWINDOW].height = event.xconfigure.height;
  2356. /*    if(event.xconfigure.width != event.xconfigure.height) {
  2357.       Player[ply].hint[BOARDWINDOW].width = MIN(event.xconfigure.width, event.xconfigure.height);
  2358.       Player[ply].hint[BOARDWINDOW].height = MIN(event.xconfigure.height, event.xconfigure.width);
  2359.       XResizeWindow(Player[ply].display, Player[ply].window[BOARDWINDOW], 
  2360.             Player[ply].hint[BOARDWINDOW].width,
  2361.             Player[ply].hint[BOARDWINDOW].height);
  2362.     }*/
  2363.       } else if(event.xconfigure.window == Player[ply].window[INFOWINDOW]) {
  2364.     Player[ply].hint[INFOWINDOW].x = event.xconfigure.x;
  2365.     Player[ply].hint[INFOWINDOW].y = event.xconfigure.y;
  2366.     Player[ply].hint[INFOWINDOW].width = event.xconfigure.width;
  2367.     Player[ply].hint[INFOWINDOW].height = event.xconfigure.height;
  2368.       }
  2369.       DEBUG("ConfigureNotify", OUT);
  2370.       break;
  2371.       
  2372.     case MappingNotify:
  2373.       XRefreshKeyboardMapping((XMappingEvent *)&event);
  2374.       break;
  2375.       
  2376.     case ButtonPress:
  2377.       DEBUG("ButtonPress Event!", IN);
  2378.       ply = WhichPlayer(event.xbutton.display, Player, ndisplays);
  2379.       if(event.xbutton.window == Player[ply].window[TITLEWINDOW]) {
  2380.     if(Player[ply].Mode == TITLEMODE)
  2381.       Player[ply].Mode = PLAYMODE;
  2382.     if(ndisplays==1 || Player[other(ply)].Mode == PLAYMODE) {
  2383.       Mode = PLAYMODE;
  2384.       FORI(ndisplays, 
  2385.            XUnmapWindow(Player[I].display, Player[I].window[TITLEWINDOW]);
  2386.            XMapWindow(Player[I].display, Player[I].window[BOARDWINDOW]);
  2387.            XMapWindow(Player[I].display, Player[I].window[INFOWINDOW]); );
  2388.       time(&starttimer);
  2389.     }
  2390.       }
  2391.       if(Mode == KILLMODE && event.xbutton.window == Player[ply].window[BOARDWINDOW]) {
  2392.     if(event.xbutton.button == Button1) {
  2393.       if(Turn == ply || ndisplays == 1) {
  2394.         if(FigureMouseClick(&board, event.xbutton.x, event.xbutton.y, Player[ply].dx, 
  2395.                 Player[ply].dy, Player[ply].ox, Player[ply].oy, &x, &y) == TRUE) {
  2396.  
  2397.           if(GetStone(&board, x, y) != EMPTY) {
  2398.         AddNewNode(board.movetree, KILL, KILL, KILL);
  2399.         KillStones(&board, x, y, GetStone(&board, x, y));
  2400.         FullRedraw(Player, ndisplays,  MAINWINDOW);
  2401.           } else
  2402.         XBell(Player[ply].display, 20);
  2403.         } else
  2404.           XBell(Player[ply].display, 20);
  2405.       }
  2406.     }
  2407.       }
  2408.       if(Mode == PLAYMODE && event.xbutton.window == Player[ply].window[BOARDWINDOW]) {
  2409.     if(event.xbutton.button == Button1) {
  2410.       if(Turn == ply || ndisplays == 1) {
  2411.         if(FigureMouseClick(&board, event.xbutton.x, event.xbutton.y, Player[ply].dx, 
  2412.                 Player[ply].dy, Player[ply].ox, Player[ply].oy, &x, &y) == TRUE) {
  2413.           if(GetStone(&board, x, y) == EMPTY) {
  2414.         MoveTree *temp;
  2415.         AddStone(&board, x, y, Turn);
  2416.         temp = AddNewNode(board.movetree, x, y, Turn);
  2417.         if(PlaceStoneOnBoard(&board, x, y, Turn) == 0) {
  2418.           XBell(Player[ply].display, 20);
  2419.           AddStone(&board, x, y, EMPTY);
  2420.           DeleteNode(board.movetree);
  2421.         } else if(lastmove != NULL && 
  2422.               (Length(temp->kill) == 1) &&
  2423.               (Length(lastmove->kill) == 1) &&
  2424.               lastmove->x == temp->kill->next->x && 
  2425.               lastmove->y == temp->kill->next->y && 
  2426.               lastmove->color == temp->kill->next->color &&
  2427.               lastmove->kill->next->x == temp->x && 
  2428.               lastmove->kill->next->y == temp->y && 
  2429.               lastmove->kill->next->color == temp->color) {
  2430.           UndoLastMove(&board);
  2431.           sprintf(text, "Illegal Move: KO!");
  2432.           
  2433.           DrawInfoText(Player[ply].display, Player[ply].window[INFOWINDOW], 
  2434.                    Player[ply].gc[INFOWINDOW], MESS_OFF_X, MESS_OFF_Y, 
  2435.                    text, Player[ply].font_struct);
  2436.           
  2437.           XBell(Player[ply].display, 20);
  2438.         }
  2439.         else {
  2440.           if(lastmove != NULL)
  2441.             FORI(ndisplays, DrawCross(Player[I].display, Player[I].window[BOARDWINDOW], 
  2442.                           Player[I].gc[2], 
  2443.                           Player[I].foreground, Player[I].background, 
  2444.                           GridToScrn(lastmove->x, Player[I].ox, Player[I].dx),
  2445.                           GridToScrn(lastmove->y, Player[I].oy, Player[I].dy),
  2446.                           Player[I].dx, Player[I].dy, other(lastmove->color)); );
  2447.           lastmove = temp; /* keep track of the last move played. */
  2448.           lastmovecolor = lastmove->color;
  2449.           if(!IsEmpty(board.movetree->next->kill)) {
  2450.             FullRedraw(Player, ndisplays,  MAINWINDOW);
  2451.             Turn = other(Turn);
  2452.           } else {
  2453.             FORI(ndisplays, 
  2454.              DrawStoneOnBoard(Player[I].display, Player[I].window[BOARDWINDOW], 
  2455.                       Player[I].gc[2], 
  2456.                       Player[I].foreground, Player[I].background, 
  2457.                       x, y, Player[I].dx, 
  2458.                       Player[I].dy, Player[I].ox, Player[I].oy, Turn);
  2459.              DrawTurnMarkers(Player[I].display, Player[I].window[INFOWINDOW], 
  2460.                      Player[I].gc[INFOWINDOW],
  2461.                      Player[I].foreground, Player[I].background, 
  2462.                      InfoWidth, InfoHeight, other(Turn)); );
  2463.             
  2464.             /* re-draw the information window after a valid move occurs. */
  2465.             
  2466.             FullRedraw(Player, ndisplays,  INFOWINDOW);
  2467.             
  2468.             Turn = other(Turn);
  2469.           }
  2470.           if(beep)
  2471.             XBell(Player[other(ply)].display, 50);
  2472.         }
  2473.           } else {
  2474.         XBell(Player[ply].display, 20);
  2475.           }
  2476.         } else {
  2477.           XBell(Player[ply].display,20);
  2478.         }
  2479.       } else {
  2480.         XBell(Player[ply].display,20);
  2481.       }
  2482.     }
  2483.       }
  2484.       DEBUG("ButtonPress Event!", OUT);
  2485.       break;
  2486.       
  2487.     case KeyPress:
  2488.       DEBUG("KeyPress", IN);
  2489.       i = XLookupString((XKeyEvent *) &event, text, 10, &key, 0);
  2490.       
  2491.       if(i==1 && Mode == TITLEMODE) {
  2492.     switch(text[0]) {
  2493.     case 'q': /* Quit game */
  2494.       done = TRUE;
  2495.       break;
  2496.     }
  2497.       } else if(i==1 && Mode == KILLMODE) {
  2498.     switch(text[0]) {
  2499.     case 'k': /* kill mode. */
  2500.       if(Mode == KILLMODE){
  2501.         Mode = PLAYMODE;
  2502.         sprintf(text, "KillMode Cleared.  Playmode.");
  2503.         FORI(ndisplays, 
  2504.          XBell(Player[I].display, 20);
  2505.          DrawInfoText(Player[I].display, Player[I].window[INFOWINDOW], 
  2506.                   Player[I].gc[INFOWINDOW], 
  2507.                   MESS_OFF_X, MESS_OFF_Y,
  2508.                   text, Player[I].font_struct); );
  2509.       }
  2510.     }
  2511.       } else if(i==1 && Mode == PLAYMODE) {
  2512.     switch(text[0]) {
  2513.     case 'u': /* Undo move */
  2514.       if(!IsEmpty(board.movetree->next)) {
  2515.         
  2516.         UndoLastMove(&board);
  2517.         lastmove = board.movetree->next;
  2518.         Turn = other(Turn);
  2519.         FullRedraw(Player, ndisplays,  MAINWINDOW);
  2520.         
  2521.         if(Turn==BLACK)
  2522.           sprintf(text, "Black Player takes back a move.");
  2523.         else if(Turn==WHITE)
  2524.           sprintf(text, "White Player takes back a move.");
  2525.         
  2526.         FORI(ndisplays, 
  2527.          DrawInfoText(Player[I].display, Player[I].window[INFOWINDOW], 
  2528.                   Player[I].gc[INFOWINDOW], MESS_OFF_X, MESS_OFF_Y, 
  2529.                   text, Player[I].font_struct); );
  2530.       } else {
  2531.         FORI(ndisplays, 
  2532.          XBell(Player[I].display, 20););
  2533.       }
  2534.       break;
  2535.     case 'p': /* pass */
  2536.       if(Turn == ply || ndisplays == 1) {
  2537.         AddNewNode(board.movetree, PASS, PASS, PASS);
  2538.       
  2539.         if(Turn==BLACK)
  2540.           sprintf(text, "Black Player passed.");
  2541.         else if(Turn==WHITE)
  2542.           sprintf(text, "White Player passed.");
  2543.       
  2544.         FORI(ndisplays, 
  2545.          XBell(Player[I].display, 20);
  2546.          DrawInfoText(Player[I].display, Player[I].window[INFOWINDOW], 
  2547.                   Player[I].gc[INFOWINDOW], MESS_OFF_X, MESS_OFF_Y, 
  2548.                   text, Player[I].font_struct);
  2549.          DrawTurnMarkers(Player[I].display, Player[I].window[INFOWINDOW], Player[I].gc[INFOWINDOW],
  2550.                  Player[I].foreground, Player[I].background, 
  2551.                  InfoWidth, InfoHeight, Turn); );
  2552.         Turn = other(Turn);
  2553.       }
  2554.       break;
  2555.     case 'q': /* Quit game */
  2556.       done = TRUE;
  2557.       break;
  2558.     case 's': /* Save file */
  2559.       sprintf(text, "Saved game in file %s.", savefile);
  2560.       
  2561.       FORI(ndisplays, 
  2562.            DrawInfoText(Player[I].display, Player[I].window[INFOWINDOW], 
  2563.                 Player[I].gc[INFOWINDOW], MESS_OFF_X, MESS_OFF_Y, 
  2564.                 text, Player[I].font_struct); );
  2565.       
  2566.       SaveMoves(&board, savefile);
  2567.       break;
  2568.          case 'k': /* KillMode Set */
  2569.       Mode = KILLMODE;
  2570.       sprintf(text, "KillMode Set.");
  2571.       FORI(ndisplays, 
  2572.            XBell(Player[I].display, 20);
  2573.            DrawInfoText(Player[I].display, Player[I].window[INFOWINDOW], 
  2574.                 Player[I].gc[INFOWINDOW], 
  2575.                 MESS_OFF_X, MESS_OFF_Y,
  2576.                 text, Player[I].font_struct); );
  2577.       break;
  2578.  
  2579.         case 'c': /* Calculate */
  2580.       CountCapturedStones(&board, &cbs, &cws);
  2581.       CalcuBoard(&board, &whitepoints, &blackpoints, &undet);
  2582.       sprintf(text, "Black: %d+%d=%d -- White: %d+%d=%d -- U: %d ", 
  2583.           blackpoints,cws,blackpoints+cws,
  2584.           whitepoints,cbs,whitepoints+cbs+handicap,
  2585.           undet);
  2586.       FORI(ndisplays,
  2587.            XBell(Player[I].display, 20);
  2588.            DrawInfoText(Player[I].display, Player[I].window[INFOWINDOW], 
  2589.                 Player[I].gc[INFOWINDOW], 
  2590.                 MESS_OFF_X, MESS_OFF_Y,
  2591.                 text, Player[I].font_struct); );
  2592.       break;
  2593.     case 'l': /* Load file */
  2594.       DestroyMoveTree(board.movetree);
  2595.       lastmove = LoadMoves(&board, loadfile);
  2596.       Turn = board.movetree->next->color;
  2597.       
  2598.       FullRedraw(Player, ndisplays, MAINWINDOW);
  2599.       
  2600.       Turn = other(Turn);
  2601.       break;
  2602.     }
  2603.       }
  2604.       DEBUG("KeyPress", OUT);
  2605.       break;
  2606.     }   /* end of switch (event.type) */
  2607.  
  2608.   }   /* end of while (!done) */
  2609.  
  2610.   DEBUG("main", OUT);
  2611. }   /* end of main() */
  2612.  
  2613. SHAR_EOF
  2614. fi
  2615. if test -f 'xgosh_title.bm'
  2616. then
  2617.     echo shar: "will not over-write existing file 'xgosh_title.bm'"
  2618. else
  2619. cat << \SHAR_EOF > 'xgosh_title.bm'
  2620. #define noname_width 454
  2621. #define noname_height 189
  2622. static char noname_bits[] = {
  2623.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2624.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2625.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2626.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,
  2627.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  2628.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  2629.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  2630.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,
  2631.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  2632.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  2633.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  2634.  0xff,0xff,0xff,0xff,0xff,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  2635.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  2636.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  2637.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  2638.  0xff,0xff,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  2639.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  2640.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  2641.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,
  2642.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  2643.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  2644.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  2645.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xff,0xff,0xff,
  2646.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  2647.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  2648.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  2649.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x00,0x00,0x00,0x00,0x00,
  2650.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2651.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2652.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2653.  0x00,0x00,0x00,0x00,0x00,0x3f,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  2654.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  2655.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  2656.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  2657.  0xff,0x7f,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2658.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2659.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2660.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,
  2661.  0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2662.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2663.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2664.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  2665.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2666.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2667.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2668.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,
  2669.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2670.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2671.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2672.  0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2673.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2674.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2675.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2676.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2677.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2678.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2679.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,
  2680.  0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2681.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2682.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2683.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  2684.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2685.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2686.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2687.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,
  2688.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2689.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2690.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2691.  0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2692.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2693.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2694.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2695.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2696.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2697.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2698.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,
  2699.  0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2700.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2701.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2702.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  2703.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2704.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2705.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2706.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,
  2707.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2708.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2709.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2710.  0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2711.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2712.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2713.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2714.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2715.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2716.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2717.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,
  2718.  0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2719.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2720.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2721.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  2722.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2723.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2724.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2725.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,
  2726.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2727.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2728.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2729.  0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2730.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2731.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2732.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2733.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2734.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2735.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2736.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,
  2737.  0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2738.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2739.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2740.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  2741.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2742.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2743.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2744.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,
  2745.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2746.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2747.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2748.  0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2749.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2750.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2751.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2752.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2753.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2754.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2755.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,
  2756.  0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2757.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2758.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2759.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  2760.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2761.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2762.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2763.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,
  2764.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2765.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2766.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2767.  0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2768.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2769.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2770.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2771.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2772.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2773.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2774.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,
  2775.  0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2776.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2777.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2778.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  2779.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2780.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2781.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2782.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,
  2783.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2784.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2785.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2786.  0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2787.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2788.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2789.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2790.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2791.  0x00,0x00,0x00,0x00,0x00,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  2792.  0xf8,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x03,0x00,0x00,0x00,
  2793.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,
  2794.  0xbf,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x07,0xff,0xff,0xff,0x3f,0x00,0x00,
  2795.  0x00,0xf0,0xff,0xff,0x01,0xf8,0x01,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0x1f,
  2796.  0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x7f,0x00,0xf8,0x01,0x00,0xf8,0xff,
  2797.  0xff,0xff,0x3f,0xc0,0xff,0xff,0xff,0xff,0x01,0x00,0x40,0x3f,0xbf,0x00,0x00,
  2798.  0x80,0xff,0xff,0xff,0xff,0x07,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0xfe,0xff,
  2799.  0xff,0x0f,0xf8,0x01,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0x00,0x00,0x00,
  2800.  0x00,0x00,0xe0,0xff,0xff,0xff,0x03,0xfc,0x01,0x00,0xf8,0xff,0xff,0xff,0x3f,
  2801.  0xc0,0xff,0xff,0xff,0xff,0x01,0x00,0x40,0x3f,0xbf,0x00,0x00,0x80,0xff,0xff,
  2802.  0xff,0xff,0x07,0xff,0xff,0xff,0x3f,0x00,0x00,0x80,0xff,0xff,0xff,0x3f,0xfc,
  2803.  0x01,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0xf8,
  2804.  0xff,0xff,0xff,0x1f,0xfc,0x03,0x00,0xf8,0xff,0xff,0xff,0x3f,0xe0,0xff,0xff,
  2805.  0xff,0xff,0x01,0x00,0x40,0x3f,0xbf,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0x07,
  2806.  0xff,0xff,0xff,0x1f,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xfd,0x01,0x00,0x00,
  2807.  0x00,0xc0,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,
  2808.  0x7f,0xfc,0x03,0x00,0xf8,0xff,0xff,0xff,0x3f,0xe0,0xff,0xff,0xff,0xff,0x00,
  2809.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0x87,0xff,0xff,0xff,
  2810.  0x1f,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0xe0,0xff,
  2811.  0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x03,
  2812.  0x00,0xf8,0xff,0xff,0xff,0x3f,0xe0,0xff,0xff,0xff,0xff,0x00,0x00,0x40,0x3f,
  2813.  0xbf,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0x83,0xff,0xff,0xff,0x1f,0x00,0x00,
  2814.  0xfc,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,
  2815.  0x7f,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0xfc,0xff,
  2816.  0xff,0xff,0x1f,0xe0,0xff,0xff,0xff,0xff,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  2817.  0xc0,0xff,0xff,0xff,0xff,0x83,0xff,0xff,0xff,0x1f,0x00,0x00,0xff,0xff,0xff,
  2818.  0xff,0xff,0xff,0x03,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0x00,0x00,
  2819.  0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0xfc,0xff,0xff,0xff,0x1f,
  2820.  0xe0,0xff,0xff,0xff,0xff,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0xc0,0xff,0xff,
  2821.  0xff,0xff,0x83,0xff,0xff,0xff,0x1f,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,
  2822.  0x03,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0xf0,0xff,
  2823.  0xff,0xff,0xff,0xff,0xff,0x03,0x00,0xfc,0xff,0xff,0xff,0x1f,0xe0,0xff,0xff,
  2824.  0xff,0xff,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0xff,0xff,0xff,0x1f,0x00,
  2825.  0xf0,0xff,0xff,0x03,0x00,0xc0,0xff,0xff,0x1f,0xe0,0xff,0xff,0x03,0x00,0x00,
  2826.  0x80,0xff,0xff,0x1f,0xf0,0xff,0xff,0x03,0x00,0x00,0xf8,0xff,0xff,0x01,0xf8,
  2827.  0xff,0xff,0x03,0x00,0xc0,0xff,0xff,0xff,0x01,0x00,0xfe,0xff,0xff,0x07,0x00,
  2828.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0xf8,0xff,0xff,0x0f,0x00,0xe0,0xff,0x3f,
  2829.  0x00,0x00,0xe0,0xff,0xff,0x03,0x00,0xff,0xff,0x07,0x00,0x00,0xc0,0xff,0xff,
  2830.  0x03,0x80,0xff,0xff,0x07,0x00,0x00,0xfc,0xff,0x3f,0x00,0xc0,0xff,0xff,0x03,
  2831.  0x00,0x00,0xff,0xff,0x3f,0x00,0x00,0xf8,0xff,0xff,0x01,0x00,0x00,0x40,0x3f,
  2832.  0xbf,0x00,0x00,0x00,0xe0,0xff,0xff,0x07,0x00,0xe0,0xff,0x0f,0x00,0x00,0xf0,
  2833.  0xff,0xff,0x01,0x00,0xfc,0xff,0x07,0x00,0x00,0xe0,0xff,0xff,0x01,0x00,0xff,
  2834.  0xff,0x0f,0x00,0x00,0xfe,0xff,0x0f,0x00,0x00,0xff,0xff,0x03,0x00,0x00,0xfe,
  2835.  0xff,0x1f,0x00,0x00,0xf0,0xff,0xff,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  2836.  0x00,0xc0,0xff,0xff,0x07,0x00,0xe0,0xff,0x03,0x00,0x00,0xf8,0xff,0x7f,0x00,
  2837.  0x00,0xf8,0xff,0x07,0x00,0x00,0xf0,0xff,0x7f,0x00,0x00,0xfc,0xff,0x1f,0x00,
  2838.  0x00,0xfe,0xff,0x07,0x00,0x00,0xfc,0xff,0x03,0x00,0x00,0xfe,0xff,0x0f,0x00,
  2839.  0x00,0xf0,0xff,0x7f,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x80,0xff,
  2840.  0xff,0x0f,0x00,0xf0,0xff,0x01,0x00,0x00,0xfc,0xff,0x3f,0x00,0x00,0xf0,0xff,
  2841.  0x07,0x00,0x00,0xf8,0xff,0x3f,0x00,0x00,0xfc,0xff,0x1f,0x00,0x00,0xff,0xff,
  2842.  0x03,0x00,0x00,0xf0,0xff,0x03,0x00,0x00,0xfe,0xff,0x0f,0x00,0x00,0xf0,0xff,
  2843.  0x3f,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0xff,0xff,0x0f,0x00,
  2844.  0xf8,0x7f,0x00,0x00,0x00,0xfe,0xff,0x1f,0x00,0x00,0xe0,0xff,0x07,0x00,0x00,
  2845.  0xfc,0xff,0x1f,0x00,0x00,0xf8,0xff,0x3f,0x00,0x00,0xff,0xff,0x03,0x00,0x00,
  2846.  0xe0,0xff,0x03,0x00,0x00,0xfe,0xff,0x07,0x00,0x00,0xf0,0xff,0x3f,0x00,0x00,
  2847.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0xfe,0xff,0x1f,0x00,0xfc,0x3f,0x00,
  2848.  0x00,0x00,0xff,0xff,0x0f,0x00,0x00,0xc0,0xff,0x07,0x00,0x00,0xfe,0xff,0x0f,
  2849.  0x00,0x00,0xf0,0xff,0x7f,0x00,0x80,0xff,0xff,0x01,0x00,0x00,0xc0,0xff,0x03,
  2850.  0x00,0x00,0xfe,0xff,0x07,0x00,0x00,0xf0,0xff,0x3f,0x00,0x00,0x00,0x40,0x3f,
  2851.  0xbf,0x00,0x00,0x00,0x00,0xfe,0xff,0x1f,0x00,0xfe,0x1f,0x00,0x00,0x00,0xff,
  2852.  0xff,0x07,0x00,0x00,0x80,0xff,0x0f,0x00,0x00,0xfe,0xff,0x0f,0x00,0x00,0xf0,
  2853.  0xff,0x7f,0x00,0x80,0xff,0xff,0x01,0x00,0x00,0x80,0xff,0x03,0x00,0x00,0xfe,
  2854.  0xff,0x07,0x00,0x00,0xf0,0xff,0x1f,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  2855.  0x00,0x00,0xfc,0xff,0x3f,0x00,0xff,0x0f,0x00,0x00,0x80,0xff,0xff,0x03,0x00,
  2856.  0x00,0x00,0xff,0x0f,0x00,0x00,0xff,0xff,0x07,0x00,0x00,0xe0,0xff,0xff,0x00,
  2857.  0x80,0xff,0xff,0x01,0x00,0x00,0x80,0xff,0x03,0x00,0x00,0xfe,0xff,0x07,0x00,
  2858.  0x00,0xf0,0xff,0x1f,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0xfc,
  2859.  0xff,0x3f,0x00,0xff,0x07,0x00,0x00,0xc0,0xff,0xff,0x03,0x00,0x00,0x00,0xfe,
  2860.  0x0f,0x00,0x80,0xff,0xff,0x03,0x00,0x00,0xe0,0xff,0xff,0x00,0x80,0xff,0xff,
  2861.  0x01,0x00,0x00,0x00,0xff,0x03,0x00,0x00,0xfe,0xff,0x07,0x00,0x00,0xf0,0xff,
  2862.  0x1f,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0xf8,0xff,0x7f,0x80,
  2863.  0xff,0x03,0x00,0x00,0xc0,0xff,0xff,0x01,0x00,0x00,0x00,0xfe,0x0f,0x00,0x80,
  2864.  0xff,0xff,0x03,0x00,0x00,0xc0,0xff,0xff,0x00,0x80,0xff,0xff,0x03,0x00,0x00,
  2865.  0x00,0xfe,0x03,0x00,0x00,0xfe,0xff,0x03,0x00,0x00,0xf8,0xff,0x1f,0x00,0x00,
  2866.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xc0,0xff,0x03,0x00,
  2867.  0x00,0xe0,0xff,0xff,0x00,0x00,0x00,0x00,0xfc,0x0f,0x00,0xc0,0xff,0xff,0x01,
  2868.  0x00,0x00,0xc0,0xff,0xff,0x01,0x80,0xff,0xff,0x03,0x00,0x00,0x00,0xfe,0x03,
  2869.  0x00,0x00,0xfe,0xff,0x03,0x00,0x00,0xf8,0xff,0x1f,0x00,0x00,0x00,0x40,0x3f,
  2870.  0xbf,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xe0,0xff,0x01,0x00,0x00,0xe0,0xff,
  2871.  0xff,0x00,0x00,0x00,0x00,0xf8,0x0f,0x00,0xc0,0xff,0xff,0x01,0x00,0x00,0xc0,
  2872.  0xff,0xff,0x01,0xc0,0xff,0xff,0x0f,0x00,0x00,0x00,0xfc,0x03,0x00,0x00,0xff,
  2873.  0xff,0x03,0x00,0x00,0xf8,0xff,0x0f,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  2874.  0x00,0x00,0xe0,0xff,0xff,0xf1,0xff,0x00,0x00,0x00,0xf0,0xff,0x7f,0x00,0x00,
  2875.  0x00,0x00,0xf8,0x1f,0x00,0xe0,0xff,0xff,0x00,0x00,0x00,0xc0,0xff,0xff,0x01,
  2876.  0xc0,0xff,0xff,0x3f,0x00,0x00,0x00,0xfc,0x03,0x00,0x00,0xff,0xff,0x03,0x00,
  2877.  0x00,0xf8,0xff,0x0f,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0xe0,
  2878.  0xff,0xff,0xf9,0x7f,0x00,0x00,0x00,0xf0,0xff,0x7f,0x00,0x00,0x00,0x00,0xf0,
  2879.  0x1f,0x00,0xe0,0xff,0xff,0x00,0x00,0x00,0xc0,0xff,0xff,0x01,0xc0,0xff,0xff,
  2880.  0xff,0x03,0x00,0x00,0xf8,0x03,0x00,0x00,0xff,0xff,0x03,0x00,0x00,0xf8,0xff,
  2881.  0x0f,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,
  2882.  0x3f,0x00,0x00,0x00,0xf8,0xff,0x7f,0x00,0x00,0x00,0x00,0xf0,0x1f,0x00,0xf0,
  2883.  0xff,0x7f,0x00,0x00,0x00,0xc0,0xff,0xff,0x03,0xc0,0xff,0xff,0xff,0x3f,0x00,
  2884.  0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x01,0x00,0x00,0xf8,0xff,0x0f,0x00,0x00,
  2885.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0x1f,0x00,0x00,
  2886.  0x00,0xf8,0xff,0x3f,0x00,0x00,0x00,0x00,0xe0,0x07,0x00,0xf0,0xff,0x7f,0x00,
  2887.  0x00,0x00,0xc0,0xff,0xff,0x03,0x80,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,
  2888.  0x00,0x00,0xff,0xff,0x01,0x00,0x00,0xfc,0xff,0x0f,0x00,0x00,0x00,0x40,0x3f,
  2889.  0xbf,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0xfc,0xff,
  2890.  0x3f,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0xf8,0xff,0x7f,0x00,0x00,0x00,0xc0,
  2891.  0xff,0xff,0x03,0x80,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x80,0xff,
  2892.  0xff,0x01,0x00,0x00,0xfc,0xff,0x0f,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  2893.  0x00,0x00,0x80,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0xfc,0xff,0x1f,0x00,0x00,
  2894.  0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0x3f,0x00,0x00,0x00,0xc0,0xff,0xff,0x03,
  2895.  0x80,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x80,0xff,0xff,0x01,0x00,
  2896.  0x00,0xfc,0xff,0x07,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,
  2897.  0xff,0xff,0xff,0x07,0x00,0x00,0x00,0xfc,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,
  2898.  0x00,0x00,0xf8,0xff,0x3f,0x00,0x00,0x00,0xc0,0xff,0xff,0x03,0x80,0xff,0xff,
  2899.  0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  2900.  0x07,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,
  2901.  0x03,0x00,0x00,0x00,0xfc,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,
  2902.  0xff,0x3f,0x00,0x00,0x00,0xc0,0xff,0xff,0x03,0x00,0xff,0xff,0xff,0xff,0xff,
  2903.  0xff,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,
  2904.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0x01,0x00,0x00,
  2905.  0x00,0xfe,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0x1f,0x00,
  2906.  0x00,0x00,0xc0,0xff,0xff,0x03,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,
  2907.  0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x40,0x3f,
  2908.  0xbf,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x00,0x00,0x00,0x00,0xfe,0xff,
  2909.  0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0x1f,0x00,0x00,0x00,0xc0,
  2910.  0xff,0xff,0x03,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x80,0xff,
  2911.  0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  2912.  0x00,0x00,0x00,0xfc,0xff,0x7f,0x00,0x00,0x00,0x00,0xfe,0xff,0x0f,0x00,0x00,
  2913.  0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0x1f,0x00,0x00,0x00,0xc0,0xff,0xff,0x03,
  2914.  0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,
  2915.  0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,
  2916.  0xf8,0xff,0x7f,0x00,0x00,0x00,0x00,0xfe,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,
  2917.  0x00,0x00,0xfc,0xff,0x1f,0x00,0x00,0x00,0xc0,0xff,0xff,0x03,0x00,0xf8,0xff,
  2918.  0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  2919.  0x03,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,
  2920.  0x00,0x00,0x00,0x00,0xff,0xff,0x0f,0x00,0x00,0xf8,0xff,0xff,0xff,0x07,0xfe,
  2921.  0xff,0x1f,0x00,0x00,0x00,0xc0,0xff,0xff,0x03,0x00,0xf0,0xff,0xff,0xff,0xff,
  2922.  0xff,0x7f,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,
  2923.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x01,0x00,0x00,
  2924.  0x00,0xff,0xff,0x0f,0x00,0x00,0xf8,0xff,0xff,0xff,0x07,0xfe,0xff,0x1f,0x00,
  2925.  0x00,0x00,0xc0,0xff,0xff,0x03,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x00,
  2926.  0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x40,0x3f,
  2927.  0xbf,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0x01,0x00,0x00,0x00,0xff,0xff,
  2928.  0x07,0x00,0x00,0xfc,0xff,0xff,0xff,0x07,0xfe,0xff,0x0f,0x00,0x00,0x00,0xc0,
  2929.  0xff,0xff,0x01,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0xc0,0xff,
  2930.  0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  2931.  0x00,0x00,0x00,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0xff,0xff,0x07,0x00,0x00,
  2932.  0xfc,0xff,0xff,0xff,0x03,0xfe,0xff,0x0f,0x00,0x00,0x00,0xe0,0xff,0xff,0x01,
  2933.  0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0xe0,0xff,0x7f,0x00,0x00,
  2934.  0x00,0xff,0xff,0x03,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x80,
  2935.  0xff,0xff,0xff,0x03,0x00,0x00,0x00,0xff,0xff,0x07,0x00,0x00,0xfc,0xff,0xff,
  2936.  0xff,0x03,0xfe,0xff,0x0f,0x00,0x00,0x00,0xe0,0xff,0xff,0x01,0x00,0x00,0xf8,
  2937.  0xff,0xff,0xff,0xff,0xff,0x03,0x00,0xe0,0xff,0x7f,0x00,0x00,0x00,0xff,0xff,
  2938.  0x01,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,
  2939.  0x07,0x00,0x00,0x00,0xff,0xff,0x07,0x00,0x00,0xfc,0xff,0xff,0xff,0x03,0xfe,
  2940.  0xff,0x0f,0x00,0x00,0x00,0xe0,0xff,0xff,0x01,0x00,0x00,0xe0,0xff,0xff,0xff,
  2941.  0xff,0xff,0x03,0x00,0xe0,0xff,0x7f,0x00,0x00,0x00,0xff,0xff,0x01,0x00,0x00,
  2942.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0x07,0x00,0x00,
  2943.  0x00,0xff,0xff,0x07,0x00,0x00,0xfc,0xff,0xff,0xff,0x03,0xfe,0xff,0x0f,0x00,
  2944.  0x00,0x00,0xe0,0xff,0xff,0x01,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0x03,
  2945.  0x00,0xe0,0xff,0x3f,0x00,0x00,0x00,0xff,0xff,0x01,0x00,0x00,0x00,0x40,0x3f,
  2946.  0xbf,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0xff,0xff,
  2947.  0x07,0x00,0x00,0xfe,0xff,0xff,0xff,0x03,0xfe,0xff,0x0f,0x00,0x00,0x00,0xe0,
  2948.  0xff,0xff,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0x07,0x00,0xe0,0xff,
  2949.  0x3f,0x00,0x00,0x80,0xff,0xff,0x01,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  2950.  0x00,0x00,0xf0,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0xff,0xff,0x07,0x00,0x00,
  2951.  0xf0,0xff,0xff,0x7f,0x00,0xfe,0xff,0x0f,0x00,0x00,0x00,0xf0,0xff,0xff,0x00,
  2952.  0xe0,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x07,0x00,0xe0,0xff,0x3f,0x00,0x00,
  2953.  0x80,0xff,0xff,0x01,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0xf8,
  2954.  0x7f,0xfe,0xff,0x1f,0x00,0x00,0x00,0xff,0xff,0x07,0x00,0x00,0x80,0xff,0xff,
  2955.  0x0f,0x00,0xfe,0xff,0x0f,0x00,0x00,0x00,0xf0,0xff,0xff,0x00,0xff,0x00,0x00,
  2956.  0x00,0xe0,0xff,0xff,0xff,0x07,0x00,0xf0,0xff,0x3f,0x00,0x00,0x80,0xff,0xff,
  2957.  0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0xfc,0x3f,0xfe,0xff,
  2958.  0x3f,0x00,0x00,0x00,0xff,0xff,0x07,0x00,0x00,0x00,0xff,0xff,0x07,0x00,0xfe,
  2959.  0xff,0x0f,0x00,0x00,0x00,0xf0,0xff,0x7f,0x00,0xff,0x01,0x00,0x00,0x00,0xfe,
  2960.  0xff,0xff,0x07,0x00,0xf0,0xff,0x3f,0x00,0x00,0x80,0xff,0xff,0x00,0x00,0x00,
  2961.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0xfe,0x1f,0xfc,0xff,0x3f,0x00,0x00,
  2962.  0x00,0xff,0xff,0x07,0x00,0x00,0x00,0xfe,0xff,0x03,0x00,0xfe,0xff,0x0f,0x00,
  2963.  0x00,0x00,0xf8,0xff,0x7f,0x00,0xff,0x01,0x00,0x00,0x00,0xf8,0xff,0xff,0x07,
  2964.  0x00,0xf0,0xff,0x1f,0x00,0x00,0x80,0xff,0xff,0x00,0x00,0x00,0x00,0x40,0x3f,
  2965.  0xbf,0x00,0x00,0x00,0x00,0xff,0x0f,0xfc,0xff,0x7f,0x00,0x00,0x00,0xff,0xff,
  2966.  0x07,0x00,0x00,0x00,0xfe,0xff,0x01,0x00,0xfc,0xff,0x0f,0x00,0x00,0x00,0xf8,
  2967.  0xff,0x3f,0x00,0xfe,0x01,0x00,0x00,0x00,0xe0,0xff,0xff,0x07,0x00,0xf0,0xff,
  2968.  0x1f,0x00,0x00,0xc0,0xff,0xff,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  2969.  0x00,0x00,0xff,0x07,0xf8,0xff,0x7f,0x00,0x00,0x00,0xfe,0xff,0x07,0x00,0x00,
  2970.  0x00,0xfe,0xff,0x01,0x00,0xfc,0xff,0x0f,0x00,0x00,0x00,0xfc,0xff,0x3f,0x00,
  2971.  0xfe,0x03,0x00,0x00,0x00,0xc0,0xff,0xff,0x07,0x00,0xf0,0xff,0x1f,0x00,0x00,
  2972.  0xc0,0xff,0xff,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x80,0xff,
  2973.  0x07,0xf8,0xff,0xff,0x00,0x00,0x00,0xfe,0xff,0x07,0x00,0x00,0x00,0xfe,0xff,
  2974.  0x01,0x00,0xfc,0xff,0x0f,0x00,0x00,0x00,0xfc,0xff,0x1f,0x00,0xfe,0x07,0x00,
  2975.  0x00,0x00,0x80,0xff,0xff,0x07,0x00,0xf8,0xff,0x1f,0x00,0x00,0xc0,0xff,0xff,
  2976.  0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0xc0,0xff,0x03,0xf0,0xff,
  2977.  0xff,0x01,0x00,0x00,0xfe,0xff,0x0f,0x00,0x00,0x00,0xfe,0xff,0x00,0x00,0xfc,
  2978.  0xff,0x0f,0x00,0x00,0x00,0xfe,0xff,0x1f,0x00,0xfe,0x07,0x00,0x00,0x00,0x80,
  2979.  0xff,0xff,0x07,0x00,0xf8,0xff,0x1f,0x00,0x00,0xc0,0xff,0x7f,0x00,0x00,0x00,
  2980.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0xe0,0xff,0x01,0xf0,0xff,0xff,0x01,0x00,
  2981.  0x00,0xfe,0xff,0x0f,0x00,0x00,0x00,0xfe,0xff,0x00,0x00,0xf8,0xff,0x1f,0x00,
  2982.  0x00,0x00,0xfe,0xff,0x0f,0x00,0xfe,0x0f,0x00,0x00,0x00,0x80,0xff,0xff,0x03,
  2983.  0x00,0xf8,0xff,0x1f,0x00,0x00,0xc0,0xff,0x7f,0x00,0x00,0x00,0x00,0x40,0x3f,
  2984.  0xbf,0x00,0x00,0x00,0xf0,0xff,0x00,0xe0,0xff,0xff,0x03,0x00,0x00,0xfc,0xff,
  2985.  0x0f,0x00,0x00,0x00,0xff,0xff,0x00,0x00,0xf8,0xff,0x1f,0x00,0x00,0x00,0xff,
  2986.  0xff,0x0f,0x00,0xfe,0x1f,0x00,0x00,0x00,0x80,0xff,0xff,0x03,0x00,0xf8,0xff,
  2987.  0x0f,0x00,0x00,0xc0,0xff,0x7f,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  2988.  0x00,0xf8,0x7f,0x00,0xe0,0xff,0xff,0x03,0x00,0x00,0xfc,0xff,0x1f,0x00,0x00,
  2989.  0x00,0xff,0xff,0x00,0x00,0xf8,0xff,0x1f,0x00,0x00,0x00,0xff,0xff,0x07,0x00,
  2990.  0xfc,0x1f,0x00,0x00,0x00,0x80,0xff,0xff,0x03,0x00,0xf8,0xff,0x0f,0x00,0x00,
  2991.  0xe0,0xff,0x7f,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0xfc,0x3f,
  2992.  0x00,0xc0,0xff,0xff,0x07,0x00,0x00,0xfc,0xff,0x1f,0x00,0x00,0x80,0xff,0xff,
  2993.  0x00,0x00,0xf0,0xff,0x3f,0x00,0x00,0x80,0xff,0xff,0x03,0x00,0xfc,0x3f,0x00,
  2994.  0x00,0x00,0x80,0xff,0xff,0x01,0x00,0xf8,0xff,0x0f,0x00,0x00,0xe0,0xff,0x7f,
  2995.  0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0xfe,0x1f,0x00,0xc0,0xff,
  2996.  0xff,0x0f,0x00,0x00,0xf8,0xff,0x3f,0x00,0x00,0x80,0xff,0xff,0x00,0x00,0xf0,
  2997.  0xff,0x3f,0x00,0x00,0xc0,0xff,0xff,0x01,0x00,0xfc,0x7f,0x00,0x00,0x00,0x80,
  2998.  0xff,0xff,0x01,0x00,0xfc,0xff,0x0f,0x00,0x00,0xe0,0xff,0x7f,0x00,0x00,0x00,
  2999.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0xff,0x1f,0x00,0x80,0xff,0xff,0x0f,0x00,
  3000.  0x00,0xf8,0xff,0x3f,0x00,0x00,0xc0,0xff,0x7f,0x00,0x00,0xe0,0xff,0x7f,0x00,
  3001.  0x00,0xe0,0xff,0xff,0x01,0x00,0xfc,0xff,0x00,0x00,0x00,0xc0,0xff,0xff,0x00,
  3002.  0x00,0xfc,0xff,0x0f,0x00,0x00,0xe0,0xff,0x7f,0x00,0x00,0x00,0x00,0x40,0x3f,
  3003.  0xbf,0x00,0x00,0x80,0xff,0x0f,0x00,0x80,0xff,0xff,0x1f,0x00,0x00,0xf0,0xff,
  3004.  0x7f,0x00,0x00,0xe0,0xff,0x7f,0x00,0x00,0xe0,0xff,0xff,0x00,0x00,0xf0,0xff,
  3005.  0xff,0x00,0x00,0xfc,0xff,0x03,0x00,0x00,0xe0,0xff,0xff,0x00,0x00,0xfc,0xff,
  3006.  0x0f,0x00,0x00,0xf0,0xff,0x7f,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  3007.  0xe0,0xff,0x07,0x00,0x00,0xff,0xff,0x3f,0x00,0x00,0xf0,0xff,0xff,0x00,0x00,
  3008.  0xf0,0xff,0x7f,0x00,0x00,0xc0,0xff,0xff,0x01,0x00,0xf8,0xff,0x7f,0x00,0x00,
  3009.  0xfc,0xff,0x07,0x00,0x00,0xf0,0xff,0x7f,0x00,0x00,0xfe,0xff,0x0f,0x00,0x00,
  3010.  0xf0,0xff,0x7f,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0xf8,0xff,0x07,
  3011.  0x00,0x00,0xff,0xff,0xff,0x00,0x00,0xe0,0xff,0xff,0x01,0x00,0xfc,0xff,0x7f,
  3012.  0x00,0x00,0x80,0xff,0xff,0x03,0x00,0xfc,0xff,0x3f,0x00,0x00,0xf8,0xff,0x1f,
  3013.  0x00,0x00,0xf8,0xff,0x3f,0x00,0x00,0xff,0xff,0x0f,0x00,0x00,0xf8,0xff,0x7f,
  3014.  0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0xfe,0xff,0x0f,0x00,0x00,0xff,
  3015.  0xff,0xff,0x03,0x00,0xc0,0xff,0xff,0x07,0x00,0xff,0xff,0x7f,0x00,0x00,0x00,
  3016.  0xff,0xff,0x07,0x00,0xff,0xff,0x1f,0x00,0x00,0xf8,0xff,0xff,0x00,0x00,0xfe,
  3017.  0xff,0x3f,0x00,0x80,0xff,0xff,0x1f,0x00,0x00,0xfc,0xff,0xff,0x00,0x00,0x00,
  3018.  0x00,0x40,0x3f,0xbf,0x00,0xe0,0xff,0xff,0x7f,0x00,0xc0,0xff,0xff,0xff,0x1f,
  3019.  0x00,0x80,0xff,0xff,0x1f,0xe0,0xff,0xff,0x7f,0x00,0x00,0x00,0xfe,0xff,0x3f,
  3020.  0xe0,0xff,0xff,0x0f,0x00,0x00,0xf8,0xff,0xff,0x0f,0xc0,0xff,0xff,0x1f,0x00,
  3021.  0xe0,0xff,0xff,0x7f,0x00,0x80,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x40,0x3f,
  3022.  0xbf,0x00,0xf8,0xff,0xff,0xff,0x03,0xfc,0xff,0xff,0xff,0x7f,0x00,0x00,0xff,
  3023.  0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,
  3024.  0x03,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0xff,0xff,0xff,
  3025.  0xff,0x07,0xf8,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0xf8,
  3026.  0xff,0xff,0xff,0x03,0xfe,0xff,0xff,0xff,0x7f,0x00,0x00,0xff,0xff,0xff,0xff,
  3027.  0xff,0xff,0x3f,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,
  3028.  0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0xff,0xff,0xff,0xff,0x07,0xf8,
  3029.  0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0xf8,0xff,0xff,0xff,
  3030.  0x03,0xfe,0xff,0xff,0xff,0x7f,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0x3f,
  3031.  0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0xf8,0xff,0xff,
  3032.  0xff,0xff,0xff,0xff,0x01,0x00,0xff,0xff,0xff,0xff,0x07,0xf8,0xff,0xff,0xff,
  3033.  0x3f,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0xf8,0xff,0xff,0xff,0x01,0xfe,0xff,
  3034.  0xff,0xff,0x3f,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,
  3035.  0xe0,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0xf0,0xdf,0xff,0xff,0xff,0xff,
  3036.  0xff,0x00,0x00,0xff,0xff,0xff,0xff,0x07,0xfc,0xff,0xff,0xff,0x1f,0x00,0x00,
  3037.  0x00,0x40,0x3f,0xbf,0x00,0xf8,0xff,0xff,0xff,0x01,0xfe,0xff,0xff,0xff,0x3f,
  3038.  0x00,0x00,0xf0,0xff,0xff,0xff,0x7f,0xfe,0x3f,0x00,0x00,0x00,0x80,0xff,0xff,
  3039.  0xff,0xff,0x0f,0x00,0x00,0x00,0xf0,0x1f,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,
  3040.  0xff,0xff,0xff,0xff,0x07,0xfc,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x40,0x3f,
  3041.  0xbf,0x00,0xfc,0xff,0xff,0xff,0x01,0xfe,0xff,0xff,0xff,0x3f,0x00,0x00,0xc0,
  3042.  0xff,0xff,0xff,0x1f,0xfc,0x3f,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x03,
  3043.  0x00,0x00,0x00,0xf0,0x0f,0xfc,0xff,0xff,0xff,0x0f,0x00,0x80,0xff,0xff,0xff,
  3044.  0xff,0x03,0xfc,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0xfc,
  3045.  0xff,0xff,0xff,0x01,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0xff,0xff,0xff,
  3046.  0x07,0xfc,0x1f,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,
  3047.  0xf0,0x0f,0xf0,0xff,0xff,0xff,0x01,0x00,0x80,0xff,0xff,0xff,0xff,0x03,0xfc,
  3048.  0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0xfc,0xff,0xff,0xff,
  3049.  0x01,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0xf8,0xff,0xff,0x00,0xfc,0x1f,
  3050.  0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0xf0,0x07,0x80,
  3051.  0xff,0xff,0x3f,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0x03,0xfc,0xff,0xff,0xff,
  3052.  0x1f,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3053.  0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
  3054.  0x00,0x00,0xfc,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x03,
  3055.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3056.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3057.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3058.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3059.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,
  3060.  0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3061.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3062.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3063.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  3064.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3065.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3066.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3067.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,
  3068.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3069.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3070.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3071.  0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3072.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3073.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3074.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3075.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3076.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3077.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3078.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,
  3079.  0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3080.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3081.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3082.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  3083.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3084.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3085.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3086.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,
  3087.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3088.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3089.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3090.  0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3091.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3092.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3093.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3094.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3095.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3096.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3097.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,
  3098.  0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3099.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3100.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3101.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  3102.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3103.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3104.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3105.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,
  3106.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3107.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3108.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3109.  0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3110.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3111.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3112.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3113.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3114.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3115.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3116.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,
  3117.  0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3118.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3119.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3120.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  3121.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3122.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3123.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3124.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,
  3125.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3126.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3127.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3128.  0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3129.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3130.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3131.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3132.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3133.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3134.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3135.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,
  3136.  0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3137.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3138.  0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,
  3139.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  3140.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3141.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3142.  0x00,0x80,0x0f,0x00,0x00,0x00,0x00,0x80,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,
  3143.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,
  3144.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3145.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,
  3146.  0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3147.  0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3148.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x07,0x00,
  3149.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x81,0x01,0x0e,0x00,0x00,0x80,
  3150.  0x1f,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3151.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3152.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x0e,0x00,0x00,0x00,0x00,
  3153.  0x00,0x00,0x00,0x00,0x40,0x70,0xc0,0x01,0x0e,0x00,0x00,0x70,0x0e,0x20,0x00,
  3154.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,
  3155.  0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3156.  0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x1c,0x00,0x00,0x00,0x00,0x20,0x00,0x04,
  3157.  0x00,0x20,0x30,0xe0,0x00,0x06,0x00,0x00,0x08,0x0e,0x30,0x00,0x00,0x00,0x00,
  3158.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  3159.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3160.  0x00,0x00,0x00,0x08,0x04,0x00,0x00,0x00,0x00,0x18,0x00,0x03,0x00,0x30,0x38,
  3161.  0xe0,0x00,0x06,0x00,0x00,0x04,0x06,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3162.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,
  3163.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3164.  0x08,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x03,0x00,0x38,0x38,0xf0,0x00,0x07,
  3165.  0x00,0x00,0x06,0x07,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3166.  0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3167.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,
  3168.  0x00,0x00,0x00,0x1c,0x80,0x03,0x00,0x38,0x38,0xf8,0x00,0x03,0x00,0x00,0x06,
  3169.  0x07,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3170.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3171.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x80,0x01,0xc0,0x03,
  3172.  0x1c,0x80,0x03,0x00,0x38,0x38,0xe8,0x80,0x01,0x00,0x00,0x06,0x07,0x1c,0x80,
  3173.  0x7f,0x80,0x0f,0xe0,0x03,0xf8,0x07,0x04,0x06,0x00,0x00,0x00,0x00,0x40,0x3f,
  3174.  0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3175.  0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0xe0,0x03,0xb8,0x07,0x0c,0x80,0x01,
  3176.  0x00,0x38,0x38,0xe4,0x80,0x01,0x00,0x00,0x06,0x03,0x1c,0x60,0x38,0x40,0x04,
  3177.  0x10,0x01,0x86,0x03,0x87,0x07,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  3178.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3179.  0x00,0x00,0x00,0x1c,0x00,0x10,0x03,0x04,0xc7,0xff,0xf9,0x3f,0x00,0x78,0x18,
  3180.  0xe4,0xc0,0x00,0x00,0x00,0x8e,0x03,0x0c,0x30,0x18,0x20,0x00,0x08,0x00,0x83,
  3181.  0xc1,0xe7,0x03,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,
  3182.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3183.  0x1c,0x00,0x1c,0x01,0x06,0x07,0x0e,0xc0,0x01,0x00,0x10,0x1c,0xe2,0x40,0x00,
  3184.  0x00,0x00,0xc0,0xff,0x0f,0x18,0x18,0x30,0x00,0x0c,0x80,0x81,0x21,0x37,0x03,
  3185.  0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3186.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7c,0x00,0x0c,
  3187.  0x00,0x03,0x07,0x0e,0xc0,0x01,0x00,0x00,0x1c,0xe1,0x60,0x00,0x00,0x00,0x80,
  3188.  0x03,0x0e,0x18,0x18,0x30,0x00,0x0c,0x80,0x81,0x01,0x8f,0x03,0x00,0x00,0x00,
  3189.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3190.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x00,0x0e,0x00,0x03,0x07,
  3191.  0x06,0xc0,0x00,0x00,0x00,0x9c,0xe1,0x30,0x00,0x00,0x00,0x80,0x01,0x0e,0x1c,
  3192.  0x1c,0x70,0x00,0x1c,0xc0,0xc1,0x01,0x83,0x03,0x00,0x00,0x00,0x00,0x40,0x3f,
  3193.  0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3194.  0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x01,0x06,0x80,0x01,0x07,0x06,0xc0,0x00,
  3195.  0x00,0x00,0x9c,0xe0,0x18,0x00,0x00,0x00,0xc0,0x01,0x06,0x0c,0x0c,0xf0,0x00,
  3196.  0x3c,0xc0,0xc0,0x00,0x83,0x01,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  3197.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3198.  0x00,0x00,0x00,0xe0,0x03,0x06,0x80,0x01,0x03,0x07,0xe0,0x00,0x00,0x00,0x5c,
  3199.  0xe0,0x0c,0x00,0x00,0x00,0xc0,0x00,0x07,0x0c,0x0c,0xe0,0x01,0x78,0xc0,0xc0,
  3200.  0x80,0x83,0x01,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,
  3201.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3202.  0xc0,0x03,0x07,0xc0,0x01,0x03,0x07,0xe0,0x00,0x00,0x00,0x6c,0xe0,0x0c,0x00,
  3203.  0x00,0x00,0xc0,0x00,0x07,0x0c,0x0c,0xc0,0x03,0xf0,0xc0,0xc0,0x80,0x81,0x01,
  3204.  0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3205.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x07,
  3206.  0xc0,0x81,0x01,0x03,0x60,0x00,0x00,0x00,0x2c,0xe0,0x06,0x80,0x00,0x00,0x40,
  3207.  0x00,0x07,0x0e,0x0e,0x80,0x03,0xe0,0xe0,0xe0,0x80,0xc1,0x01,0x00,0x00,0x00,
  3208.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3209.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x07,0xc4,0x81,0x01,
  3210.  0x83,0x60,0x10,0x00,0x00,0x1e,0xe0,0x03,0xc0,0x00,0x00,0x20,0x00,0x03,0x0e,
  3211.  0xcf,0x04,0x03,0xc1,0xe0,0xf0,0xcc,0xc1,0x10,0x00,0x00,0x00,0x00,0x40,0x3f,
  3212.  0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3213.  0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x07,0xc3,0xc1,0x00,0x63,0x60,0x0c,
  3214.  0x00,0x00,0x1e,0xe0,0x01,0xe0,0x01,0x00,0x20,0x80,0x03,0xce,0x6e,0x07,0xc1,
  3215.  0x41,0xe0,0xec,0xc6,0xc1,0x0c,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  3216.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3217.  0x00,0x00,0x00,0x80,0x01,0x8f,0xc1,0x61,0x80,0x1f,0xf0,0x03,0x00,0x00,0x0e,
  3218.  0xe0,0x01,0xe0,0x01,0x00,0x18,0x80,0x03,0x7e,0x1e,0x87,0xc0,0x21,0xe0,0xe7,
  3219.  0xc1,0xc0,0x07,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,
  3220.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,
  3221.  0x80,0x01,0x7f,0x80,0x23,0x00,0x0f,0xe0,0x01,0x00,0x00,0x06,0xe0,0x00,0xc0,
  3222.  0x00,0xc0,0x0f,0x80,0x7f,0x1e,0x0f,0x47,0xc0,0x11,0xe0,0xf1,0xc0,0xe0,0x01,
  3223.  0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3224.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x80,0x00,0x1e,
  3225.  0x80,0x1f,0x00,0x03,0x60,0x00,0x00,0x00,0x02,0x20,0x00,0x40,0x00,0xe0,0x03,
  3226.  0x80,0x07,0x0c,0x03,0x3e,0x80,0x0f,0xc0,0x30,0x60,0x40,0x00,0x00,0x00,0x00,
  3227.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3228.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x40,0x00,0x00,0x00,0x00,0x00,
  3229.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3230.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,
  3231.  0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3232.  0x00,0x00,0x00,0x00,0x00,0x3c,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3233.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3234.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  3235.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3236.  0x00,0x00,0x78,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3237.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3238.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,
  3239.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,
  3240.  0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3241.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3242.  0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3243.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3244.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3245.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3246.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3247.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3248.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3249.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,
  3250.  0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3251.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3252.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3253.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  3254.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3255.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3256.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3257.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,
  3258.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3259.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3260.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3261.  0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3262.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3263.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3264.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3265.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3266.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3267.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3268.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,
  3269.  0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3270.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3271.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3272.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  3273.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3274.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3275.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3276.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,
  3277.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3278.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3279.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3280.  0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3281.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3282.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3283.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3284.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3285.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3286.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3287.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,
  3288.  0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3289.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3290.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3291.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,
  3292.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3293.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3294.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3295.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,
  3296.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3297.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3298.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3299.  0x00,0x00,0x00,0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3300.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3301.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3302.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3303.  0x00,0x40,0x3f,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3304.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3305.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3306.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3f,
  3307.  0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  3308.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  3309.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  3310.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x3f,0x3f,0x00,0x00,
  3311.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3312.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3313.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3314.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0x3f,0x00,0x00,0x00,0x00,0x00,
  3315.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3316.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3317.  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  3318.  0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  3319.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  3320.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  3321.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  3322.  0xff,0xff,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  3323.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  3324.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  3325.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,
  3326.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  3327.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  3328.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  3329.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xff,0xff,0xff,
  3330.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  3331.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  3332.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  3333.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,
  3334.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  3335.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  3336.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  3337.  0xff,0xff,0xff,0xff,0xff,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  3338.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  3339.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  3340.  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  3341.  0xff,0xff,0x3f};
  3342. SHAR_EOF
  3343. fi
  3344. exit 0
  3345. #    End of shell archive
  3346.